2D graphics - kuimoani/defold GitHub Wiki
2D Graphics
2D ๊ฒ์์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ง๋ฉฐ, ํ๋ฆฝ-๋ถ ์ ๋๋ฉ์ด์ ์ด๋ ๋ณต์กํ ์คํ์ธ(Spine) ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉ๋๊ฑฐ๋ ํ์ผ๋งต์ ๋ ๋ฒจ์ด๋ ๋ฐฐ๊ฒฝ์ ๋งคํ๋๊ธฐ๋ ํฉ๋๋ค. ์ด ๋ฉ๋ด์ผ์์๋ Defold๊ฐ ์ง์ํ๋ 2D ๊ทธ๋ํฝ ์์์ ๋ํด ์์ธํ ์์๋ณด๋๋ก ํฉ๋๋ค.
์ฑ๋ฅ์์ ์ด์ ๋ก, ๋ค์์ ์ด๋ฏธ์ง๋ค์ ํ๋ ํน์ ๋ช ๊ฐ์ ํฐ ์ด๋ฏธ์ง๋ก ๋ณํฉํ์ฌ, ์์ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ด๋ค ํฐ ์ด๋ฏธ์ง์ ์๋ธ-์ด๋ฏธ์ง๋ก ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์์ ์ด๋ฏธ์ง๋ค์ ํฐ ์ด๋ฏธ์ง๋ก ๋ณํฉํ๋ ๊ฒ์ ๋ฐ์คํฌํPC๋ ์ฝ์๊ฒ์๊ธฐ์ ๋นํด ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ ฅ์ด ๋ถ์กฑํ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์์ ํนํ ์ค์ํฉ๋๋ค.
Defold์๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ง ๋ฐฉ์์ ์์ ์ด ์์ต๋๋ค:
Atlases
์ํ๋ผ์ค๋ ์ด๋ฏธ์ง๋ค์ ๋ชฉ๋ก์ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์๋์ ์ผ๋ก ํฐ ์ด๋ฏธ์ง๋ก ๋ณํฉํฉ๋๋ค. ์์ธํ ๊ฒ์ http://en.wikipedia.org/wiki/Texture_atlas ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Tile Sources
ํ์ผ ์์ค๋ ๊ท ์ผํ ๊ฒฉ์(grid)์ ์ ๋ ฌ๋ ์๋ธ-์ด๋ฏธ์ง๋ค์ ์ด๋ฏธ ํฌํจํ๊ณ ์๋ ์ด๋ฏธ์ง ํ์ผ์ ์ฐธ์กฐํฉ๋๋ค. ๋ค๋ฅธ ํด์์๋ ํ์ผ์ (tile set)์ด๋ ์คํ๋ผ์ดํธ์ํธ(sprite sheet)๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ธํ ๊ฒ์ http://en.wikipedia.org/wiki/Tileset#Tile_set ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Importing Image Files
Defold์์ ์์ ์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ ๊ณ์ธต๊ตฌ์กฐ(project hierarchy)์ ์์ด์ผ ํ๋ฏ๋ก, ๊ทธ๋ํฝ์ ์ฐ์ผ ์ด๋ฏธ์ง ํ์ผ์ ์ํฌํธ ํด์ผ ํฉ๋๋ค. ์ด๋ฏธ์ง ์์ ์ ์ํฌํธํ๊ธฐ ์ํด์๋ ๊ทธ๋ฅ ๋น์ ์ ์ปดํจํฐ ํ์ผ ์์คํ ์์ Defold ์๋ํฐ์ ํ๋ก์ ํธ ์ต์คํ๋ก๋ฌ ์ฐฝ(Project Explorer)์ ์ ๋นํ ์์น๋ก ๋๋๊ทธ-์ค-๋๋กญ ํ๋ฉด ๋ฉ๋๋ค.
ํ์ฌ, Defold๋ ์ค์ง PNG ์ด๋ฏธ์ง ํฌ๋ฉง ๋ง์ ์ง์ํฉ๋๋ค.


Creating an Atlas
์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์, ๋จผ์ ์ํ๋ผ์ค์ ์ด๋ฏธ์ง๋ฅผ ์ฑ์ฐ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ์ํ๋ผ์ค์ ์ด๋ฏธ์ง๋ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ๋ฉด, ์คํ๋ผ์ดํธ๋ ํํฐํดFX ์ปดํฌ๋ํธ์ ๊ฐ์ด ์ค๋ธ์ ํธ ์ปดํฌ๋ํธ์ ๊ทธ๋ํฝ ์์ค๋ก ์ฌ์ฉ ํ ์ ์์ต๋๋ค. (์๋์ Sprite ์ ParticleFX ๊ฐ์ด๋ ์ฐธ๊ณ )
- ์์์ ์ค๋ช ํ๋๋ก ์ด๋ฏธ์ง ํ์ผ๋ค์ ์ํฌํธ ํ๊ธฐ
- ํ๋ก์ ํธ ์ต์คํ๋ก๋ฌ ์ฐฝ(Project Explorer)์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ New > Atlas File ์ ํํ๊ธฐ
- ์์๋ผ์ธ ์ฐฝ(Outline)์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ Add Images ์ ํํ๊ธฐ
์ด๋ ๊ฒ ํ๋ฉด ์ํ๋ผ์ค์ ์ถ๊ฐํ๊ธธ ์ํ๋ ์ด๋ฏธ์ง๋ค์ ๊ฒ์ํ๊ณ ์ ํํ ์ ์๋ ๋ํ์์๊ฐ ์ด๋ฆฌ๊ฒ ๋ฉ๋๋ค. ์ด๋ฏธ์ง ํ์ผ์ ํํฐ๋งํ๊ฑฐ๋ ํ ๋ฒ์ ์ฌ๋ฌ ํ์ผ๋ค์ ์ ํํ ์ ์์ต๋๋ค.


Defining flip-book animations
์ํ๋ผ์ค์์ ํ์ ์ด๋ฏธ์ง๋ค์ ์ ํํด์ฌ ํ๋ฆฝ-๋ถ ์ ๋๋ฉ์ด์ ์ ์ ์ ํ ์ ์์ต๋๋ค:
- ์์๋ผ์ธ ์ฐฝ(Outline)์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ Add Animation Group ์ ํํ๊ธฐ
- ์์ฑ๋ ์ ๋๋ฉ์ด์ ๊ทธ๋ฃน์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ์ ๋๋ฌ Add Images๋ฅผ ๋๋ฅด๊ณ ์ ๋๋ฉ์ด์ ์ ํ๋ ์์ ์ฌ์ฉํ ์ด๋ฏธ์ง๋ค์ ์ ํํ๊ธฐ
- ํ์ํ ๋งํผ ์ ๋๋ฉ์ด์ ์ ์์ฑ(Properties)์ ์กฐ์ ํ๊ธฐ
ํ์ํ๋ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๋๋๊ทธํด์ ์์๋ผ์ธ ์ฐฝ์ ์ด๋ฏธ์ง ์์๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ํ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ์ ๊ณต(Edit ๋ฉ๋ด, ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ, ํค๋ณด๋ ๋จ์ถํค)์ ์ฌ์ฉํ์ฌ ์์๋ผ์ธ ์ฐฝ์ ์ด๋ฏธ์ง๋ค์ ์ฝ๊ฒ ๋ณต์ฌํ ์๋ ์์ต๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ๋ ค๋ฉด ํด๋น ์ ๋๋ฉ์ด์ ์ ์ ํํ๊ณ ํค๋ณด๋์ Spaceํค๋ฅผ ๋๋ฌ ์ฃผ์ธ์.
Creating a Tile Source
ํ์ผ ์์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ชจ๋ ํ์ผ์ ํฌํจํ๊ณ ์๋ ์ด๋ฏธ์ง๊ฐ ํ์ํฉ๋๋ค. ๋ชจ๋ ํ์ผ์ ๋ฐ๋์ ์์ ํ ๋์ผํ ํฌ๊ธฐ๋ก ๊ฒฉ์(grid)์ ๋ฐฐ์น๋์ด์ผ ํฉ๋๋ค. Defold๋ ๊ฐ ํ์ผ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ๋ spacing๊ณผ padding์ ์ง์ํฉ๋๋ค. ๋ํ Defold๋ ๋๋๋ก ๋ฐ์ํ๋ visual artifacts(์์์ด๋ ํ๋ฆฌ์ปค๋ง ๋ฑ์์ ์ด์ํ ์๊ฐ์ ํ์๋ค)์ ํผํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ์ธ๊ณฝ์ ์ ๋์ถ(extrude borders) ์ํฌ ์ ์์ต๋๋ค.
์ด๋ฏธ์ง ์์ค๊ฐ ์ค๋น๋๋ฉด ์๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ผ ์์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค:
- ์ด๋ฏธ์ง๋ฅผ ํ๋ก์ ํธ ์ต์คํ๋ก๋ฌ ์ฐฝ(Project Explorer)์ผ๋ก ๋๋๊ทธํ์ฌ ํ๋ก์ ํธ์ ์ํฌํธํฉ๋๋ค.
- ์ ํ์ผ ์์ค(Tile Source) ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์์ฑ์ฐฝ์ Image ์์ฑ์์ ๊ฒ์[...] ๋ฒํผ์ ๋๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ ํํฉ๋๋ค. ์ด์ ์ด๋ฏธ์ง๊ฐ ์๋ํฐ์ ํ์๋ฉ๋๋ค.
- ํ์ผ์ ๋์ด(Tile Height)๋, ๋์ด(Tile Width), ๋ง์ง(Tile Margin), ๊ฐ๊ฒฉ(Tile Spacing)์ ์๋ณธ ์ด๋ฏธ์ง์ ์๋ง๊ฒ ์กฐ์ ํฉ๋๋ค. ๊ฐ ์ ์ด ํฌ๋ช ํ ๊ทธ๋ฆฌ๋์ ์ ํํ๊ฒ ์ ๋ ฌ๋๋ฉด ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋ ๊ฒ์ ๋๋ค.

์ ํ ํํฐ๋ง(linear filtering - ์๋ ์ฐธ์กฐ)๊ณผ ํจ๊ป ํ์ผ๋ค์ด ๋ค๋ฅ ๋ค๋ฅ ๋ถ์ด์๋(์ธ๊ณฝ์ ์ด ์๋) ํ์ผ ์์ค๋ฅผ ์ฌ์ฉํ๋ฉด edge bleeding์ผ๋ก ๋ถ๋ฆฌ๋ visual artifact๊ฐ ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค. ๋ง์ฝ ์ด์ํ ํ์ผ์ ๊ฐ์ฅ์๋ฆฌ๊ฐ ์ปฌ๋ฌ๊ฐ ์๋ ํฝ์ ๋ก ๋์ด ์๋ค๋ฉด, ์ด ๊ฐ์ฅ์๋ฆฌ ๋ถ๋ถ์ ์์์ด ํ๋ฌ ๋์น๋ ๊ฒ ์ฒ๋ผ ์ด์ํ๊ฒ ๋ณด์ผ ์๋ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ Extrude Border ์์ฑ(์ํ๋ผ์ค๋ ํ์ผ ์์ค์์ ์ฐพ์ ์ ์์)์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฐ์ ๊ฐ์ฅ์๋ฆฌ์ ํฝ์ ์ด ๊ฒ์ ์คํ์ ์ฌ์ฉ๋ ์ต์ข ํ ์ค์ณ์์ ์๋์ ์ผ๋ก ๋ช ๋ฒ์ด๋ ๋ณต์ ๋์ด์ผ ํ๋ ์ง๋ฅผ ์ง์ ํฉ๋๋ค.
์ข์ ์ธก์ ๋ฐฉ๋ฒ์ ๊ฒ์์ด ๋ณด์ฌ์ง ๋ ํ ์ค์ณ์ ํฌ๊ธฐ๋ฅผ ์ผ๋งํผ ์กฐ์ ํ ์ง์ ์๋ง๋ ์ซ์๋ฅผ ๋ช ์ํ๋ ๊ฒ์ ๋๋ค. ๊ฒ์์๋๋ฅผ ์ ๋ฐ ํฌ๊ธฐ๋ก ๋ํ๋ด๋ ค๋ฉด Extrude Borders๋ฅผ 2๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค. ํ ์ค์ฒ๋ฅผ ์ ๋ฐ ํฌ๊ธฐ๋ก ์ค์ฌ์ ์ฌ์ฉํ๋ฉด, ๋ ๋๋ง์ ๋ฐ๋งต(mipmap)์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ฐ๋งต์ ์๋ณธ ์ด๋ฏธ์ง์ ๋์ด์ ๋์ด๊ฐ ์ ๋ฐ์ ๋๋ค.
Tile Source Collision Shapes
ํ์ผ ๋งต(Tile Map)์ ์ฌ์ฉํ์ฌ ๋ฌผ๋ฆฌ ์ํธ์์ฉ์ ํ์ฑํํ๋ ์ถฉ๋ ์์ญ(Collision shape)์ ์๋์ ์ผ๋ก ์์ฑ๋ ์ ์์ต๋๋ค. Defold๋ Collision ์์ฑ์ ๋ช ์๋ ์ด๋ฏธ์ง๋ก๋ถํฐ ๊ฐ ํ์ผ์ ๋ณผ๋กํ ์์ญ(Convex shape)์ ์์ฑํ๊ธฐ ์ํด ์ํ ์ฑ๋(alpha channel)์ ์ฌ์ฉํฉ๋๋ค. ์ด ์์ฑ์๋ ์ด๋ฏธ์ง์ ๋๊ฐ์ ์ถฉ๋ ์์ญ์ ์ํด ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋ ์์ญ์ ์์ฑํ๋ ๊ฒ์ด ๋๋ถ๋ถ์ด๊ฒ ์ง๋ง, ๋ณด์ด๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์ถฉ๋ ์์ญ์ ์ํ๋ค๋ฉด ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์ ํํด๋ ๋ฉ๋๋ค. ์ถฉ๋(collision) ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ๋ฉด, ์์ฑ๋ ์ถฉ๋ ์์ญ์ ๋ํ๋ด๋ ๊ฐ ํ์ผ์ ์ค๊ณฝ์ ์ผ๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ๋ฐ์ดํธ ๋ฉ๋๋ค. ์์ธํ ๊ฒ์ Physics ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.

Tile Source flip-book animations
ํ์ผ ์์ค์ ์ ๋๋ฉ์ด์ ์ ์ ์ํ๋ ค๋ฉด ๊ฐ ํ๋ ์์ ํ์ผ์ ํ๋ ์ฉ ํ ๋น(๋์ผํ ๋์ด์ ๋์ด๋ก ๊ฒฉ์์ ๋ค์ด๋ง๊ฒ)ํด์ผ ํ๋ฉฐ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์์๋ก ๋๋ํ ๋์์ผ ํฉ๋๋ค. ๋ค์ ์ค๋ก ํ์ด ๋์ด๊ฐ๋ฉด ๋ค์ ๋งจ ์ผ์ชฝ๋ถํฐ ์์๋ฉ๋๋ค. ์๋ก ์์ฑ๋ ํ์ผ ์์ค์๋ "anim"์ด๋ผ๊ณ ํ๋ ๊ธฐ๋ณธ ์ ๋๋ฉ์ด์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ํด๋ฆญํ๋ฉด ์ด๋ฆ(id), ์์๊ณผ ๋ ํ๋ ์(Start Tile, End Tile), ์ฌ์(Playback) ๋ฐฉ๋ฒ ๋ฐ ์๋(Fps), ์ ๋๋ฉ์ด์ ์ด ๊ฐ๋ก๋ ์ธ๋ก๋ก ๋ค์งํ์ผ ํ๋์ง(Flip Horizontally, Flip Vertically)๋ฅผ ์ค์ ํ๋ ์ ๋๋ฉ์ด์ ์์ฑ์ฐฝ(Properties)์ด ๋ํ๋ฉ๋๋ค.

์์๋ผ์ธ(Outline) ์ฐฝ์ Tile Source๋ฅผ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญํ์ฌ ์ปจํ ์คํธ ๋ฉ๋ด๋ฅผ ์ด๊ณ Add Animation๋ฅผ ์ ํํ์ฌ ํ์ผ ์์ค์ ์ ๋๋ฉ์ด์ ์ ์ฝ๊ฒ ๋ ์ถ๊ฐํ ์ ์์ต๋๋ค.

Manipulating Game Objects and components
๊ฒ์ ์ค๋ธ์ ํธ์ ์๊ฐ์ ๊ตฌ์ฑ์์(์คํ๋ผ์ดํธ, ํํฐํดFX ๋ฑ)๋ฅผ ์ถ๊ฐํ๋ฉด, ์ปดํฌ๋ํธ์ ์์น๊ฐ๊ณผ ํ์ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ ๊ฒ์ ์ค๋ธ์ ํธ์ ์์น, ํ์ ์ ๋ํ ์คํ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๊ฒ๋ค๊ฐ ์ด ๊ฐ์ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์กฐ๋ฆฝ(assemble)ํ ๋ ์ปดํฌ๋ํธ์ ์ค์ ๋ฉ๋๋ค.

Defold์ ๊ฒ์ ์ค๋ธ์ ํธ๋ ์ด๋, ํ์ ์ด ๊ฐ๋ฅํ๋ฉฐ ์ด ์์ฑ๋ค์ ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ ํ ์ ์์ต๋๋ค. ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ด๋, ํ์ ํ๋ฉด ํ์์ ์ปดํฌ๋ํธ๋ ๊ฐ์ด ์์ง์ด๊ฒ ๋์ง๋ง, ๊ฒ์ ์ค๋ธ์ ํธ์ ์๋์ ์ธ ์์น๊ฐ๊ณผ ํ์ ๊ฐ(relative position and rotation)์ ์ ์ง๋ฉ๋๋ค. ์ปดํฌ๋ํธ๋ ๋๊ณ ์ผค ์ ์์ง๋ง ๋์ ์ผ๋ก ์ด๋, ํ์ ํ๊ฑฐ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ฃผ๋๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค(์๋์ ์์ธ์ฌํญ ์ฐธ๊ณ ). ๊ทธ๋ฌ๋ฏ๋ก ๊ทธ๋ํฝ์ ์์น, ํ์ ์ ๋ณ๊ฒฝํ๊ธธ ์ํ๋ค๋ฉด ๋ณ๋์ ๊ฒ์์ค๋ธ์ ํธ๋ก ์ง์ด ๋ฃ์ด์ผ ํฉ๋๋ค. ๊ฒ์ ์ค๋ธ์ ํธ์ ๊ทธ๋ฃน์ด๋ ๊ฒ์์ค๋ธ์ ํธ ๊ณ์ธต(hierarchy)์ ์ปฌ๋ ์ ์ ํธ๋ฆฌํ๊ฒ ์กฐ๋ฆฝ(assemble)๋ ํ ์ด ์ค๋ธ์ ํธ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์์ ๋กญ๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค:

-- wand ๊ฒ์ ์ค๋ธ์ ํธ์ ์ด๋, ํ์ ์ ๋๋ฉ์ด์
์ํค๊ธฐ
go.animate("wand", "position", go.PLAYBACK_ONCE_FORWARD, vmath.vector3(530, 79, -0.1), go.EASING_INOUTSINE, 0.5)
go.animate("wand", "euler", go.PLAYBACK_ONCE_FORWARD, vmath.vector3(0, 0, -70), go.EASING_INOUTSINE, 0.5)
Dynamically scaling Sprites
์คํ๋ผ์ดํธ ์ปดํฌ๋ํธ์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์๋ก ์ฐ๊ด๋์ด ๋์ํ๋์ง ์๋ ๋ฐฉ์์ ์ดํด(mental model)๊ฐ ์กฐ๊ธ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
์คํ๋ผ์ดํธ๋ vmatch.vector3 ํ์ ์ธ "scale" ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ์ปดํฌ๋ํธ์ ์๋์ฒ๋ผ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ค ์ ์์ต๋๋ค:
go.animate("my_object#sprite", "scale.x", go.PLAYBACK_ONCE_FORWARD, 1.5, go.EASING_INOUTSINE, 2)
Sprites
์คํ๋ผ์ดํธ ์ปดํฌ๋ํธ๋ ๊ทธ๋ํฝ์ด๋ ํ๋ฆฝ๋ถ ์ ๋๋ฉ์ด์ ์ ๊ฒ์ ์ค๋ธ์ ํธ์ ์ถ๊ฐํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์บ๋ฆญํฐ๋ ์ํ(props)๋ค์ ๋ง๋๋ ๋ฐ ์ฐ์ด๋ฉฐ, ์คํ๋ผ์ดํธ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค:
- ์คํ๋ผ์ดํธ๊ฐ ์ํ ๊ฒ์์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ด๊ธฐ
- ์์๋ผ์ธ ์ฐฝ์์ ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ๋ฒํผ ๋๋ฌ์ Add Component ์ ํํ๊ธฐ
- "Sprite" ์ ํํ๊ธฐ
- ์คํ๋ผ์ดํธ์ Image ์์ฑ์ ํ์ผ์์ค๋ ์ํ๋ผ์ค๋ก ์ง์ ํ๊ธฐ
- ์คํ๋ผ์ดํธ์ Default Animation ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ ์ดํ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ง์ ํ๊ธฐ
๊ธฐ๋ณธ ์ ๋๋ฉ์ด์ ์ ๊ฒ์ ์คํ์ค์ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋๋ฉด ํ๋ ์ด ๋ฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ก ์ํ๋ผ์ค๋ฅผ ์ฌ์ฉ์ค์ด๋ผ๋ฉด Default Animation ์์ฑ์ ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ํตํด์ ์ด๋ฏธ์ง๋ค์ ๋ณผ ์ ์์ต๋๋ค. ํ์ผ ์์ค์ ์๋ ์ด๋ฏธ์ง๋ก๋ถํฐ ์คํ๋ผ์ดํธ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด, 1 ํ๋ ์ ์ง๋ฆฌ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค๊ณ Playback ์์ฑ์ "None"์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
Collision Shapes
์คํ๋ผ์ดํธ๋ ์์ง ํ์ผ์์ค์์ ์ถฉ๋๋ชจํ(Collision Shape)์ ์๋์์ฑํ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค. ๋์ , ๋ค๋ฅธ ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ถฉ๋ ๋ชจํ(Collision Shape)์ ์ฌ์ฉํ์ฌ ์ถฉ๋ ์ค๋ธ์ ํธ(Collision Object)๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์์ธํ ๊ฒ์ Physics ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Blend Mode
๋ธ๋ ๋ ๋ชจ๋ ์์ฑ์ ์คํ๋ผ์ดํธ๊ฐ ๋ค์ชฝ์ ๊ฒน์ณ์ง ๊ทธ๋ํฝ๊ณผ ์ด๋ป๊ฒ ํผํฉ(blend)ํ ์ง ์ ์ํ๋ ์์ฑ์ ๋๋ค. ์๋์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ธ๋ ๋ ๋ชจ๋์ ์ข ๋ฅ์ ๊ฐ๊ฐ ์ด๋ป๊ฒ ๊ณ์ฐ๋๋์ง์ ๋ํ ์ค๋ช ์ด ์์ต๋๋ค:
Alpha
๊ธฐ๋ณธ ๋ธ๋ ๋ฉ: a0 * rgb0 + (1 - a0) * rgb1
Add
ํด๋น ์คํ๋ผ์ดํธ ํฝ์ ์ ์ปฌ๋ฌ๊ฐ์ ์ด์ฉํด ๋ฐฐ๊ฒฝ์ ๋ฐ๊ฒ ํจ: rgb0 + rgb1
Add Alpha
๋ณด์ฌ์ง๋(visible) ์คํ๋ผ์ดํธ ํฝ์ ์ ์ปฌ๋ฌ๊ฐ์ ์ด์ฉํด ๋ฐฐ๊ฒฝ์ ๋ฐ๊ฒ ํจ: a0 * rgb0 + rgb1
Multiply
ํด๋น ์คํ๋ผ์ดํธ ํฝ์ ์ ์ปฌ๋ฌ๊ฐ์ ์ด์ฉํ์ฌ ๋ฐฐ๊ฒฝ์ ์ด๋ก๊ฒ ํจ: rgb0 * rgb1
Sprite Shading
๊ธฐ๋ณธ ์คํ๋ผ์ดํธ ์์ด๋ฉ ํ์ผ์ ํ๋ก์ ํธ์ "/builtins/material/sprite.*" ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ์์ด๋ฉ์ ํ์ค ํ ์ค์ณ ์์ ๋ณด์ (regular texture lookup)์ ์ํํ์ง๋ง ํ ์ค์ณ ์์๊ณผ ๊ฒน์ณ์ง๋(multiply) ์์กฐ(tint: fragment shader constant) ๋ํ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
ํด๋ฆญ์ ์คํ๋ผ์ดํธ๋ฅผ ํ์๊ฒ ๋ฒ์ฉ์ด๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์ํด ์ปค์คํ ์์ด๋ฉ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์คํ๋ผ์ดํธ์ ์ปค์คํ ์์ด๋ฉ์ ์ค์ ํ๊ธฐ ์ํด ์๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ผํด ๋ด ์๋ค:
- "/builtins/material/sprite.*" ์ ํ์ผ๋ค์ ๋น์ ์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ์ค ํ๋("built-in" ๋๋ ํ ๋ฆฌ์ ์ปจํ ์ธ ๋ ์์ ํ ์ ์์ต๋๋ค.)์ ๋ณต์ฌํฉ๋๋ค. ์ด๊ฒ์ ์ ํด์ง ๋ฐฉ์์ ์๋์ง๋ง ์์ ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ณต์ฌํ "sprite.material" ํ์ผ์ ์ด์ด, ์์์ ๋ณต์ฌํ ์์ด๋ ํ์ผ(.vp์ .fp ํ์ผ)์ ๊ฒฝ๋ก๋ก ๋ค์ ๋งคํ(remap)ํฉ๋๋ค.
- ๋ณต์ฌํ ์์ด๋ ํ์ผ(.vp์ .fp ํ์ผ)์ ์ํ๋ ๋๋ก ์์ ํฉ๋๋ค. ๋ง์ฝ ์์ด๋ ์์(shader constants)๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋์ ๋ฉํฐ๋ฆฌ์ผ(material) ํ์ผ์ ์ ์ธ๋์ด์ผ ํฉ๋๋ค.
- ์คํ๋ผ์ดํธ๋ฅผ ์ด์ด์ ์์ฑ์ฐฝ(Properties)์์ ์ ๋ฉํฐ๋ฆฌ์ผ๋ก ์ง์ ํด์ค๋๋ค.
- ๊ฒ์ ์คํ ์ค์ ์์ด๋ ์์(shader constants)๋ฅผ ์ค์ ํ๋ ค๋ฉด, sprite.set_constant() ํจ์์ sprite.reset_contant() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
Tile Maps
ํ์ผ๋งต์ ํฐ ๊ฒฉ์(grid) ๊ณต๊ฐ์ผ๋ก ํ์ผ ์์ค์ ํ์ผ์ ์กฐ๋ฆฝํ๊ฑฐ๋ ํ์ธํ ํ๊ฒ ํด ์ฃผ๋ ์ปดํฌ๋ํธ์ ๋๋ค. ํ์ผ๋งต์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ฒจ ํ๊ฒฝ์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ ์ถฉ๋์ ๊ฐ์งํ๊ณ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ ์ํด ๋งต์ ํ์ผ์์ค๋ก๋ถํฐ ์ถฉ๋ ๋ชจํ(Collision Shapes)์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
Painting Tiles
- ์์ ํ๊ธธ ์ํ๋ ํ์ผ๋งต์ ์ฝ๋๋ค.
- Property ๋๋ Outline ์ฐฝ์ ํ๋๊ทธ ์ด์(flagged issues)๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
- Outline ์ฐฝ์์ ํ์ธํ ํ๋ ค๋ ๋ ์ด์ด๋ฅผ ์ ํํ๊ฑฐ๋ ์์ฑํฉ๋๋ค.
- ๋ธ๋ฌ์๋ก ์ฌ์ฉํ ํ์ผ์ ์ ํํฉ๋๋ค. (ํ์ผ ํ๋ ํธ๋ฅผ ๋ณด๊ธฐ ์ํด์ Space ํค๋ฅผ ๋๋ฌ ๋ณด์ธ์.)

Picking Tiles
ํ์ผ๋งต์์ ํ์ผ์ ์ง์ ์ ํํด์ ๋ธ๋ฌ์๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. Shift๋ฅผ ๋๋ฅธ ์ฑ๋ก ํ์ผ์ ํด๋ฆญํ๋ฉด ๋ธ๋ฌ์๊ฐ ์ ํ๋ฉ๋๋ค. Shift๋ฅผ ๋๋ฅธ ์ฑ๋ก ํด๋ฆญ๊ณผ ๋๋๊ทธ๋ฅผ ์ฌ์ฉํด ํ์ผ์ ๊ตฌ์ญ์ ์ ํํ๋ฉด ๋ ํฐ ๋ธ๋ฌ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.

Erasing Tiles
์ง์ฐ๊ฐ ํด์ ํ์ธํ ํ ํ์ผ์ ์ง์ฐ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ง์ฐ๊ฐ๋ฅผ ์ ํํ๋ ค๋ฉด ์๋ ๋ฐฉ๋ฒ๋ค์ด ์์ต๋๋ค:
- ํ์ผ๋งต ๋ฉ๋ด์์ ์ ํํ๊ธฐ
- Backspaceํค ๋๋ฅด๊ธฐ
- ํ์ผ ํ๋ ํธ์์ ์ ํ๋ ํ์ผ์ ๋ค์ ํด๋ฆญํ๊ธฐ
- ํ์ผ๋งต์์ ์๋ฌด ๋น ์ ์ด๋ ์ ํํ๊ธฐ
Attaching Physics
ํ์ผ๋งต์ ๋ฌผ๋ฆฌ ๊ธฐ๋ฅ์ ์ฒจ๋ถํ๋ ๊ฒ์ผ๋ก ํ์ผ๊ณผ ๊ด๋ จ๋ ์ถฉ๋์ ๊ฐ์งํ๊ฑฐ๋ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ ํ ์ ์์ต๋๋ค. ํ์ผ๋งต์ ๋ฌผ๋ฆฌ ๊ธฐ๋ฅ์ ๋ถ์ด๊ธฐ ์ํด์๋ Physics ๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋๋ค.
Changing tiles from script
๊ฒ์์ด ์คํ๋๋ ๋์ ๋์ ์ผ๋ก ํ์ผ๋งต์ ์ปจํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค. ์ด ์์ ์ ์ํด์๋ ํ์ผ๋งต์ set_tile ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค:
-- ๋๊ฐ์ ํ์ผ๋ก ๋ ๋ฌธ์ง์ "์ด๋ฆฐ ๋ฌธ์ง" ํ์ผ๋ก ๋ฐ๊พธ๋ ์ฝ๋
-- ๋ฌธ์ง์ด ๋ ๊ฐ์ ํ์ผ์ด๋ฏ๋ก ๋ ๋ฒ ํธ์ถ ํ์
local doorpos = vmath.vector3(174, 305, 0)
msg.post("/level#tilemap", "set_tile", { layer_id = hash("layer1"), position = doorpos, tile = 58 })
-- ๋ฌธ์ง์ ์๋ถ๋ถ ํ์ผ์ ์์น๊ฐ์ ๊ธฐ์ค์ผ๋ก "dy"๋ฅผ 1๋ก ์ค์ ํด์ ๋ฌธ์ง ์๋ซ๋ถ๋ถ ์์
msg.post("/level#tilemap", "set_tile", { layer_id = hash("layer1"), position = doorpos, tile = 46, dy = 1 })
Adding a Tile Map to your game
๊ฒ์์ ํ์ผ ๋งต์ ์ถ๊ฐํ๋ ค๋ฉด:
- ํ์ผ๋งต ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ๊ฒ์ ์ค๋ธ์ ํธ๋ ํ์ผ๋ก ๋์ด ์๋์ง ์ปฌ๋ ์ ์์ ์ง์ ์์ฑ๋์๋์ง๋ ์๊ด ์์ต๋๋ค.
- ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ ํ Add component from file ์ ์ ํํฉ๋๋ค.
- ํ์ผ๋งต ํ์ผ์ ์ ํํฉ๋๋ค.
๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ํ์ผ๋งต์ ํฌํจํ๊ณ ์์ผ๋ฉฐ ์ด์ ์ํ๋ ์์น์ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๋ฐฐ์นํ๊ฑฐ๋ ์คํฐ ํ ์ ์์ต๋๋ค.

Texture Filtering and Sampling
Defold๋ ํ ์ค์ณ ์ํ๋ง์ ์ํด ๋๊ฐ์ง ๋ฐฉ์์ ์ง์ํ๊ณ ์์ต๋๋ค. ์ด ๋ฐฉ์๋ค์ texel(ํ ์ค์ณ์ ํฝ์ )์ด ์๋ฒฝํ๊ฒ ํ๋ฉด์ ํฝ์ ์ ์ ๋ ฌ๋์ด ๋ค์ด๋ง์ง ์๋ ๊ฒฝ์ฐ์ ์๊ฐ์ ๊ฒฐ๊ณผ(visual result)๋ฅผ ์ ์ดํ๋๋ฐ, ์ด ๋ฌธ์ ๋ ์ฌ๋ฆฌ์ค(seamlessly: ์ด์์๊ฐ ์๋)ํ ํ ์ค์ณ๋ฅผ ํฌํจํ๋ ์คํ๋ผ์ดํธ๋ฅผ ์์ง์ผ ๊ฒฝ์ฐ(์๋ฅผ ๋ค์ด ๋ฐฉํฅ ์๊ด์์ด 0.2ํฝ์ ์ ์์ง์ฌ ๋ณด๋ฉด...) ์ด๊ฑฐ๋ ์นด๋ฉ๋ผ๋ฅผ ์ฌ๋ฆฌ์คํ๊ฒ ์์ง์ด๊ฑฐ๋ ์ค ์ธ/์์ ํ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค:
Nearest
์ด ๋ฐฉ์์ ๊ฐ์ฅ ๊ทผ์ ํ ํ ์ (nearest texel)์ ์ ํํด ํ๋ฉด์ ํฝ์ ์ ์ฑ์๋๋ค. ์ด ์ํ๋ง ๋ฐฉ๋ฒ์ ํ ์ค์ณ์์ ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ๊ณผ ์ผ๋์ผ ๋งคํ์ ์ํ ๊ฒฝ์ฐ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ทผ์ ํํฐ๋ง(nearest filtering)์ ์ฌ์ฉํ๋ฉด ์์ง์ผ ๋ ํฝ์ ์์ ํฝ์ ๋ก ๋ชจ๋ ๊ฒ์ด ์ค๋ (snap)๋๋ฉฐ ์คํ๋ผ์ดํธ๊ฐ ์ฒ์ฒํ ์์ง์ด๋ ๊ฒฝ์ฐ ๊น๋นก์ด๊ฒ ๋ณด์ผ ์ ์์ต๋๋ค.
Linear
ํ๋ฉด ํฝ์ ์ ์ปฌ๋ฌ๋ฅผ ์ ํ๊ธฐ ์ ์ ํ ์ ์ ์ด์ํ ์ปฌ๋ฌ๋ค์ ํ๊ท ์น๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด ๋ฐฉ์์ ์คํ๋ผ์ดํธ๊ฐ ํ๋ฉด์ ์์ ํ๊ฒ ์ฑ์๋๊ธฐ ์ด์ ์ ํฝ์ ๋ก ๋ธ๋ฆฌ๋(bleed) ๋๋ฏ๋ก ์ง์์ ์ผ๋ก ๋๋ฆฌ๊ฒ ์์ง์ด๊ฑฐ๋, ๋ถ๋๋ฝ๊ฒ(smooth) ๋ง๋๋๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๋ฐฉ์์ ์ ์ฒด ํฝ์ ๋ณด๋ค ์์ ์คํ๋ผ์ดํธ๋ฅผ ์์ง์ด๋๊ฒ ๊ฐ๋ฅํฉ๋๋ค.
์ด ํํฐ๋ง ์ค์ ๊ฐ์ Project Settings ํ์ผ์ ์ ์ฅ๋๋ฉฐ, ์ฌ๊ธฐ ๋ ๊ฐ์ง ์ค์ ๊ฐ์ด ์์ต๋๋ค:
default_texture_min_filter
์ถ์ ํํฐ๋ง(Minifying filtering)์ ํ ์ ์ด ํ๋ฉด ํฝ์ ๋ณด๋ค ์์ ๋ ์ ์ฉ๋ฉ๋๋ค.
default_texture_mag_filter
ํ๋ ํํฐ๋ง(Magnifying filtering)์ ํ ์ ์ด ํ๋ฉด ํฝ์ ๋ณด๋ค ํด ๋ ์ ์ฉ๋ฉ๋๋ค.
๋ ์ค์ ๊ฐ ๋ชจ๋ linear๋ nearest ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
[graphics]
default_texture_min_filter = nearest
default_texture_mag_filter = nearest
์๋ฌด๊ฒ๋ ์ง์ ํ์ง ์์ผ๋ฉด, ๋ ๊ฐ ๋ชจ๋ linear ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
(๊ทธ๋ํฝ ์์ ์ผ๋ถ๋ Kenney: http://kenney.nl/assets ์ ์ํด ์ ์๋์์ต๋๋ค.)