Layouts - kuimoani/defold GitHub Wiki
Layouts
Defold๋ ๋ชจ๋ฐ์ผ ์ฅ์น์์ ํ๋ฉด ๋ฐฉํฅ ์ ํ(screen orientation changes)์ ๋ฐ๋ผ ์๋์ผ๋ก ์กฐ์ ํ๋ GUI ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ํ๋ฉด์ ๋ฐฉํฅ(orientation)๊ณผ ์ข ํก๋น(aspect ratio)์ ๋ง๊ฒ GUI๋ฅผ ๋์์ธ ํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์๋ ์ด ๊ธฐ๋ฅ์ด ๋์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
GUI์ ๋์ ๋ ์ด์์์ ๋์คํ๋ ์ด ํ๋กํ์ผ์ ํ์ฌ ๊ฒ์์ด ์คํ์ค์ธ ๋์คํ๋ ์ด์ ๋์ด์ ๋์ด์ ๋งค์นญ์์ผ์ ๋์ํ๊ฒ ๋ฉ๋๋ค.
Display profiles
๊ฐ ํ๋ก์ ํธ๋ "builtins/render/default.display_profiles"์ ๋ ๊ฐ์ ํ๋กํ์ผ์ ํฌํจํ๊ณ ์์ต๋๋ค.

Landscape
ํญ 1280 ํฝ์ , ๋์ด 720 ํฝ์
Portrait
ํญ 720 ํฝ์ , ๋์ด 1280 ํฝ์
16:9์ ์ข ํก๋น๋ฅผ ์ฌ์ฉํ๋ ์ฅ์น์์๋ ์ด๋ค ํ๋กํ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ํ๋ฉด์ ์ค์ ๋ฌผ๋ฆฌ ํฌ๊ธฐ๊ฐ ๋ ํฌ๊ฑฐ๋ ์๋๋ผ๋, ์์ง์ด ๋น์ทํ ํ๋กํ์ผ๋ก ์๋์ผ๋ก ์ ํํด ์ค๋๋ค. ๋ง์ฝ ๊ธฐ๋ณธ ํ๋กํ์ผ์ ์์ ํด์ผ ํ๋ค๋ฉด, ๋ด์ฅ๋ ํ์ผ์ ํ๋ก์ ํธ๋ก ๋ณต์ฌํ๊ฑฐ๋ ์๋ก ์์ฑํด์ "project.settings"์์ ์์ง์ด ์ ์ ์๊ฒ ํ๋กํ์ผ ํ์ผ์ ์ง์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.

๋ํ dynamic_orientation ๋ฅผ ์ฒดํฌํด์ ์ฅ์น์ ๋ฐฉํฅ์ด ๋ฐ๋ ๊ฒฝ์ฐ ์์ง์ด ๋ ์ด์์์ ์๋์ผ๋ก ๋ณ๊ฒฝํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
ํ์ฌ iOS์ฉ ๊ฐ๋ฐ ์ฑ์ dynamic_orientation ์ค์ ์ ๋ฐ๋ฅด์ง ์๊ณ , ๋ฐฉํฅ์ ๋์ ์ผ๋ก ํญ์ ๋ณ๊ฒฝํฉ๋๋ค.
GUI layouts
์ ์๋ ๋์คํ๋ ์ด ํ๋กํ์ผ์ GUI ์๋ํฐ์์ ๋ ์ด์์์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ํฐ์์์ ์์ ์, ๋ค๋ฅธ ๋ ์ด์์์ ์ถ๊ฐํ์ง ์์ผ๋ฉด Default ๋ ์ด์์์ด ๊ธฐ๋ณธ ๋ ์ด์์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ก์ด ๋ ์ด์์์ ์ถ๊ฐํ๋ ค๋ฉด Outline ์ฐฝ์์ Layouts ํด๋๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญ ํ Layout ๋ฉ๋ด๋ฅผ ์ ํํ์ธ์.

Default ๋ ์ด์์์ GUI ์ฌ์ ๋ค๋ฅธ ๋ ์ด์์์ ์ถ๊ฐํ์ง ์์์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ "Landscape" ๋ ์ด์์์ ์ถ๊ฐํ๊ณ "Portrait" ๋ ์ด์์๋ ์ถ๊ฐํ๋ฉด ๋ชจ๋ ๋ฐฉํฅ์ ์ ๋ง๊ฒ ๋ฉ๋๋ค.
GUI ์ฌ์ ํธ์ง์ค์ผ ๋, ๋ชจ๋ ๋ ธ๋๋ค์ ํน์ ํ ๋ ์ด์์์์ ํธ์ง๋ฉ๋๋ค. ํ์ฌ ์ ํ๋ ๋ ์ด์์์ Outline ์ฐฝ์ ๋ํ๋๋ฉฐ bold ๊ธ์จ์ฒด๋ก ํ์๋ฉ๋๋ค.

๋ํ ๋ ธ๋๊ฐ ํ์ฌ ์ ํ๋ ๋ ์ด์ด(Default ๋ง๊ณ ๋ค๋ฅธ ๋ ์ด์ด)์์ ์ค๋ฒ๋ผ์ด๋ ๋๊ฑด์ง ์๋์ง์ ๋ฐ๋ผ ์๊ฐ์ ํผ๋๋ฐฑ์ ์ป์ ์๋ ์์ต๋๋ค. ์ ํ๋ ๋ ์ด์์์ผ๋ก ๋ ธ๋ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด Default ๋ ์ด์ด์ ๊ด๋ จ๋ ํ๋กํผํฐ๊ฐ ์ค๋ฒ๋ผ์ด๋ ๋ฉ๋๋ค. ์ค๋ฒ๋ผ์ด๋ ๋ ํ๋กํผํฐ๋ค์ ํ๋์์ผ๋ก ํ์๋๋ฉฐ ํ๋์ ํ๋กํผํฐ ์ด๋ฆ์ ํด๋ฆญํด์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ๋กํผํฐ๋ฅผ ๋ฆฌ์ ํ ์ ์์ต๋๋ค.

๋ ์ด์ด๋ ํ๋กํผํฐ๋ง์ ์ค๋ฒ๋ผ์ด๋ ํฉ๋๋ค. ํ ๋ ์ด์ด๋ ์ญ์ ํ๊ฑฐ๋ ์ ๋ ธ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋ ์ด์ด์์ ๋ ธ๋๋ฅผ ์ญ์ ํด์ผ ํ๋ค๋ฉด ๋ ธ๋๋ฅผ ํ๋ฉด ๋ฐ์ผ๋ก ์ฎ๊ฒจ๋ฒ๋ฆฌ๊ฑฐ๋ ์คํฌ๋ฆฝํธ์์ ์ญ์ ํ ์ ์์ต๋๋ค. ๋ํ ํ์ฌ ์ ํ๋ ๋ ์ด์์์ ์ฃผ๋ชฉํ ํ์๊ฐ ์์ต๋๋ค. ๋ง์ฝ ํ๋ก์ ํธ์ ๋ ์ด์์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์ ๋ ์ด์์์ ํ์ฌ ์ ํ๋ ๋ ์ด์์์ ๋ฐ๋ผ ์ ์ ๋๊ฒ ๋ฉ๋๋ค. ๋ํ ๋ ธ๋๋ฅผ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ฉด ํ์ฌ ์ ํ๋ ๋ ์ด์์์ ๊ณ ๋ คํ์ฌ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๊ฐ ์ํ๋ฉ๋๋ค.
Layout change messages
์์ง์ด ์ฅ์น์ ํ์ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ ์ด์์์ ์ ํํ๋ฉด, layout_changed ๋ฉ์ธ์ง๋ฅผ GUI ์ปดํฌ๋ํธ์ ์คํฌ๋ฆฝํธ๋ก ๋ณด๋ด์ค๋๋ค. ์ด ๋ฉ์ธ์ง์๋ ๋ ์ด์์์ ํด์ฌ ์์ด๋๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฏ๋ก ์คํฌ๋ฆฝํธ์์ ์ด๋ค ๋ ์ด์์์ด ์ ํ๋์๋์ง์ ๋ฐ๋ผ ์๋ง์ ๋ก์ง์ ์ํํ ์ ์์ต๋๋ค.
function on_message(self, message_id, message, sender)
if message_id == hash("layout_changed") and message.id == hash("Landscape") then
-- ๋ ์์ด์์ landscape๋ก ์ ํ
...
elseif message_id == hash("layout_changed") and message.id == hash("Portrait") then
-- ๋ ์ด์์์ portrait๋ก ์ ํ
...
end
end
๋ํ ํ์ฌ ๋ ๋ ์คํฌ๋ฆฝํธ๋ ์๋์ฐ ์ฐฝ(๊ฒ์ ํ๋ฉด)์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ฐฉํฅ์ด ์ ํ๋ ๊ฒฝ์ฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.
function on_message(self, message_id, message)
if message_id == hash("window_resized") then
-- ์๋์ฐ๊ฐ ๋ฆฌ์ฌ์ด์ง๋จ. message.width๊ณผ message.height์ ์ฐฝ์ ์ ํฌ๊ธฐ๊ฐ ํฌํจ๋์ด ์์
end
end
In game content
๋ฐฉํฅ(orientation)์ด ์ ํ๋๋ฉด, GUI ๋ ์ด์์ ๋งค๋์ ๋ ๋ ธ๋ ํ๋กํผํฐ์ ๋ ์ด์์์ ๋ง๊ฒ GUI ๋ ธ๋๋ค์ ์ค์ผ์ผ๊ณผ ์์น๋ฅผ ์๋์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ฒ์ ๋ด ์ปจํ ์ธ ์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ์๋์ฐ์ ๋ง๊ฒ ๋๋ ค์(stretch-fit) ๋ทฐ๊ฐ ๋ ๋๋ง๋ฉ๋๋ค.

๋น์ ์ ๊ฒ์ ๋์์ธ์ด ๊ฒ์ ๋ทฐ๊ฐ ๋ ๋๋ง ๋์ด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํน์ ์ ์ฝ์ด ํ์ํ ๊ฒฝ์ฐ, ๋ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋น์ ์ด ์ํ๋ ๋์, ์นด๋ฉ๋ผ, ๋ทฐํฌํธ, ๊ธฐํ ๊ณ ๋ ค์ฌํญ์ ์ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
(์ผ๋ถ ๊ทธ๋ํฝ ์ ์ ์ Kenney๊ฐ ์ ์ํ์ต๋๋ค : http://kenney.nl/assets)