메뉴 건너뛰기

창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳

이미지가 중요한 글인데 이미지가 다 짤렸네요. 압박.


준비물은 일단 이미지입니다.

예제 이미지로 럭키♥를 준비했습니다.




럭키! 럭키! 럭키! 와아아아!

어쨌든 이 럭키를 가지고 예제를 진행하겠습니다! 와아아! 글쓸 맛 난다!


일단 Love2D에서 뭔가 그린다는 건 좌표입니다.

저번의 배열에서 [y][x]로 처리했던것과 달리 이번엔 진짜 (x, y)꼴입니다.

와아아!



이런 럭키가 있으면 럭키의 x는 30, y는 10이 됩니다.

x 30, y 10에 그리면 저렇게 그려지는 겁니다.

(어쩐지 위키에 있는 그림이랑 똑같이 그려졌지만 럭키가 있으니 이쪽을 쓰겠습니다.)


하지만 파일이 있다고 바로 그릴 수 있는 게 아닙니다.

파일을 먼저 불러와야 합니다.

이것을 love.graphics.newImage로 불러옵니다.


[이미지] = love.graphics.newImage([파일경로])


[이미지] 부분에는 불러온 이미지를 식별할 수 있는 이름을,

[파일경로]에는 파일의 경로를 넣습니다.

Love2D의 main.lua와 같은 경로에 있으면 파일 이름만 적어도 됩니다.

이것을 유식한 말로 상대경로라고 합니다.


저는 pokemon이라는 이미지를 생성해보겠습니다.


pokemon = love.graphics.newImage("lucky.png")


공 식 위키에 따르면, 여러 번 실행되는 콜백(뭔지는 다뤘죠?)에서 저런 짓을 하면 상당히 게임이 느려진다고 합니다. 그러니까 그냥 한번만 불러온 뒤 (love.load 같은 콜백에서요!) 나중에 여러 번 호출하는 것이 훨씬 더 효율적이겠죠.

love.update나 love.draw같은 콜백에는 넣지 맙시다.


예제 코드:

function love.load()

pokemon = love.graphics.newImage("lucky.png")

end


이미지를 불러왔으니 이제 그릴 수 있습니다.

이미지를 그리는 것은 보통 love.draw 콜백에서 하게 됩니다.


love.graphics.draw(drawable, x, y, r, sx, sy, ox, oy, kx, ky) <br />

이게 뭔 개소리야?!

하나하나 뜯어봅시다.


Lua 글에서 설명했듯, 괄호 안에는 인수가 들어갑니다.

저기에 넣는 값에 따라 어떻게 그려질지가 달라지겠지요.


drawable는 그릴 수 있는 것이니, 이미지가 되겠네요.

방금 생성한 이미지 (예제에서는 pokemon)를 넣어주면 되겠습니다.


x랑 y는 뭔지 감이 잡히지 않습니까? 그림이 어디에 그려질지를 넣어주면 됩니다.

위의 그림이라면 x가 30이고 y가 10이겠지요.


r은 뭘까요? 회전시키는 겁니다.

그냥 그리고 싶을 때는 0을 넣습니다.


love.graphics.draw(pokemon, 100, 100, 0, 1, 1, 0, 0, 0, 0)

모르는 건 그냥 다 눈치껏 넣었을 때 어떻게 그려지냐면..



그럼 회전이니까 30도 돌리고 싶으면 어떻게 하나요? 30 넣으면 되나요?

위키에 조건이 있네요, 라디안으로 넣어달라고 합니다. 그게 뭐죠? 우걱우걱?

그래서 그냥 위키의 예제를 배껴서 math.rad(30) 를 넣었습니다.


love.graphics.draw(pokemon, 100, 100, math.rad(30), 1, 1, 0, 0, 0, 0)



얍.


주의할 점(?)은.. 기울어지면 좌표도 같이 기울어지는 듯 합니다.

90을 넣었더니 90도로 기울어지면서 아주 좌측의 창 테두리에 달라붙어 버리는 현상이;;

좀 더 파보면 좋겠지만 귀찮아서 생략,


sx랑 sy의 s는 scale의 약자입니다.

크기 조절!

기본값은 1이며, 넣은 만큼 크기가 줄어나거나 늘어듭니다.

0.5를 넣으면 반으로 줄어들고, 2를 넣으면 두배로 커집니다.

sx와 sy가 같을 필요는 없으며, 음수가 들어가면 그 쪽으로 잡아당겨서 커집니다.

그러니까.. -2를 넣으면 반으로 줄어드는 게 아니라 2배로 커지는데 좌표가 이동하면서 커집니다.

직접 한번 여러가지 해 보세요,



love.graphics.draw(pokemon, 100, 100, 0, 0.5, 1, 0, 0, 0, 0)

(가로를 반으로 축소)



love.graphics.draw(pokemon, 100, 100, 0, 1, 2, 0, 0, 0, 0)

(세로를 2배로 확대)


여담이지만 게임 엔진의 편리함을 몸으로 체험하고 있습니다.

빌려온 '세가의 신입 사원 교육 과정에서 배우는 게임 프로그래밍의 정석' 에서는 이미지의 확대, 축소, 회전을 큰 비중으로 다루고 있는데 엔진을 쓰면 코드 한 줄 쓰면 끝입니다.

얼핏 보니 회전을 다룰 때 삼각함수를 썼던가... 하지만 엔진을 쓰면 복잡한 수학은 그리 필요 없습니다.

하지만 엔진을 써도 어떻게 돌아가는지 원리는 알아야 합니다.

아니면, 엔진이 문제를 일으키면 속수무책이 되어버리던지, 엔진이 아직 없는 새로운 플랫폼에서 뭔가 개발하려면 무능해진다던지 하는 문제가 생깁니다.


ox와 oy는 뭘까요?

o는 아마 Origin, 시초? 뭐 그런 뜻입니다.

어디서부터 그릴지를 알려주는 것이라고 할 수 있습니다.



(위 그림은 예를 위해 그린 그림으로 실제 픽셀수와는 다릅니다.)


ox가 20, oy가 20이라면 그림의 20, 20 되는 점에서부터 그리기를 시작한다는 것입니다.

결과적으로 저렇게 잘린 럭키 이미지를 그리게 되는 것입니다.


이것만으로 '이미지를 다 그리게 되었다!' 라고 생각하면 좋겠지만...

타일 처리(뭔지는 나중에 설명해 드리겠습니다.)와 같은 것을 하기에는 아직 모자랍니다.

그래서 좀 더 찾아봤더니 Quad라는 것이 있는 고로 다음부터는 그 이야기를 해보겠습니다.


이미지 그리는 방법 2편, 기다려 주세요.

다음에는 Quad에 대해 파 보고, Quad가 뭔지, 어떻게 쓰는지 알아보겠습니다.

그리고는 Lua 소코반을 그래픽으로 옮기겠습니다... 모든 계획이 순조롭게 진행된다면요.


요약:

- Love2D에서 이미지를 그리기 전에 먼저 불러와야 한다.

- 불러오는 방법은 [이미지] = love.graphics.newImage([파일경로])

- 이미지를 그리기 위해서는 love.graphics.draw(drawable, x, y, r, sx, sy, ox, oy, kx, ky) .

- 일반적인 경우에 drawable, x, y만 지정해주고 sx, sy는 1, 나머지 인수는 다 0으로 지정해준다.

- 적절한 경우에 적절한 인수들을 적절히 사용하면 적절한 효과를 낼 수 있으며 이것을 적절히 사용하면 적절히 도움이 된다.
조회 수 :
812
등록일 :
2013.09.17
08:35:57 (*.209.135.92)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=study&document_srl=703469
List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜sort 최근 수정일
145 {질문}그림에대한 질문일세. [5] 슈퍼타이 1703   2008-01-30 2008-03-17 04:37
뭐 만화에서보면 눈이 빛나거나 빠르게 달리는것처럼 효과주고 점프할때 바닥에 ^^ 이런식으로 효과 주는거나 빙글빙글돌때는 주변에 원같은거 그려주고 그런걸 뭐라고 하죠? * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:26)  
144 흥크립트 궁금한점. [5] 장펭돌 1704   2008-01-31 2008-03-17 04:37
1. AVI 같은 동영상 파일이나, 플래시파일 재생 지원 가능한가여? 가능하다면... 뭐라 쓰면 되는지...? 2. 던전앤 러버처럼 마우스 클릭으로 실행되는 이벤트 만드는 방법 설명좀 부탁... * 똥똥배님에 의해서 게시물 이동되었습니다 (2008-03-11 14:03)  
143 클릭 문제.... ㄱ- [1] 장펭돌 1801   2008-01-31 2008-03-17 04:37
~클릭 100, 123, 0, 276, 186 @계속 ^100 이벤트 발생! 그림판에서 좌표수를 확인하고나서 123,0 부터 276,186의 위치를 위 처럼 정한뒤 흥크립트 실행후 아무리 클릭해봐도 안되네요... 또하나 궁금증은 창모드가 아닌 전체화 모드에선 마우스가 안나오는데.....  
142 흥크립트 질문 [1] 장펭돌 1733   2008-02-01 2008-03-17 04:37
흥크립트에서 if처럼 변수1이 1이면 어떻게되고 변수1이 2면 어떻게되고 이렇게 어떻게하나요? 역전심판에서 1+1 답 얘기할때, 정답을 말하느냐 오답을 말하느냐에 따라서 달라지는것 처럼 말이죠... 봐도 잘 모르겠네요... * 똥똥배님에 의해서 게시물 이동되...  
141 [re] 흥크립트 질문 똥똥배 1782   2008-02-01 2008-03-17 04:37
조금 복잡하지만 이렇습니다... ====================================== [분기] ([레벨]==16)?91:[분기] [분기] ([레벨]==15)?92:[분기] [분기] ([레벨]==14)?93:[분기] [분기] ([레벨]<=13)?94:[분기] @이동 [분기] ^91 당신의 랭크 : S @이동 95 ^92 당신의...  
140 흥크립트, 이건 답변 안해주신듯... [1] 장펭돌 1669   2008-02-02 2008-03-17 04:37
마우스를 지원하게 하고싶은곳과 지원 안하게 하고싶은곳... 이 두곳을 어떻게 구분하죠? 저같은경우엔 특별한 경우를 제외하곤 마우스가 안나오게 할껀데... 어떻게 해야... 하는지 자세히 설명좀 부탁... ㅈㅅ.. * 똥똥배님에 의해서 게시물 이동되었습니다 ...  
139 아아, 그렇다면... 흥크립트에서 [1] 장펭돌 1712   2008-02-02 2008-03-17 04:37
제가 타이틀을 만들고 나서 @마우스지원 해놓고 나니까 선택지에서 키보드로 선택할수 있는 커서가 사라지더라구요? 이건 원래 그런건지... 키보드로 선택해도 되긴 되는데 커서가 없어서 지금 뭘 고르고 있는건지 알수가 없는데.. 원래 이런건가요? 으음, 그...  
138 흥크립트 AVI 지원에서... [2] file 장펭돌 1823   2008-02-02 2008-03-17 04:37
 
137 흥크립트 기본 바꾸기. [3] 장펭돌 1855   2008-02-03 2008-03-17 04:37
흥크립트 마우스 포인터를 바꾸려는데, system 의 "커서"를 바꾸면 된다구 하셨짢습니까? 그럼, "DATA\XXX.mlc" 이렇게 해야 되는겁니까, 그리구, 기본 커서 크기좀 알려줏메. ps. 또 문제가 생김... 왠일인지 동영상이 그냥 곰플레이어로 재생하면 멀쩡한데, ...  
136 마우스 포인터 바꾸기가 안되네요... +질문2 장펭돌 1748   2008-02-04 2008-03-17 04:37
어떻게 해도 자꾸 마우스 모양이 안보이길래... 아예 mlc 파일을 DATA폴더 밖으로 꺼내고... System.txt와 같이 둔 상태로 그림 파일명이 "마우스" 이므로.. {#커서} "마우스" 이렇게 해봤는데도 안되네요... 으음,, 어떻게 해야하는겁니까... ㅇ 질문 2 "DIVX...  
135 마우서 포인트 바꾸기 질문 다시 ㄱ- [2] 장펭돌 1807   2008-02-05 2008-03-17 04:37
똥똥배님이 알려주신대로, DATA 폴더내에 mlc 파일을 하나 생성하고, 커서에 "파일명" 이렇게 재대로 했는데.. 안됩니다. 똥똥배님은, Global.mlc 를 이용할수 있지만, 저는 Global.mlc 내에 그림파일을 추가시킬수가 없어서 안되는거 아닙니까? * 똥똥배님에 ...  
134 흥크립트에대해. [16] 궤레브 1711   2008-02-06 2008-03-17 04:37
음.. 그냥 몇가지 간단한 질문인데요 그림과 그림이 맞닿앗을때 라는 액션을 만들수 있나요? 만약 그림과 그림이 맞닿앗을때 액션이 없으면 턴알피지밖에 불가능할거같은데 마우스로 눌러서 공격하는 버츄얼캅같은 게임이 아니고선.. 이건 제가 직접 실험해볼...  
133 흥크립트 질문.. [3] 궤레브 1747   2008-02-07 2008-03-17 04:37
흔히 알만툴에서 쓰이는 조건분기를 어떻게 쓰나요? 펭돌님 말로는 if문이 있다던데.. 그리고.. 흥크립트 테스트인가? 슬라임같이 생긴 사람이 돌아다니면서 사람들 만나면 대화 나오게 만드신게 있더군요? 거기서처럼 그냥 아무 추가 이벤트가 없어도 꺼지지 ...  
132 [re] 흥크립트 질문.. [2] 똥똥배 1797   2008-02-07 2008-03-17 04:37
>흔히 알만툴에서 쓰이는 >조건분기를 어떻게 쓰나요? 펭돌님 말로는 if문이 있다던데.. >그리고.. >흥크립트 테스트인가? 슬라임같이 생긴 사람이 >돌아다니면서 사람들 만나면 대화 나오게 만드신게 있더군요? >거기서처럼 그냥 아무 추가 이벤트가 없어도 ...  
131 갑자기 급질문.. 궤레브 1737   2008-02-08 2008-03-17 04:37
별 특별한건 아니구요 변수 강좌 보니까 ? 가 사용되더라구요? ?는 무슨 의미인가요? [분기] ([레벨]==16)?91:[분기] [분기] ([레벨]==15)?92:[분기] [분기] ([레벨]==14)?93:[분기] [분기] ([레벨]<=13)?94:[분기] @이동 [분기] 여기서 보면 [레벨]==16 이런...  
130 [re] 갑자기 급질문.. [1] 똥똥배 1548   2008-02-08 2008-03-17 04:37
>별 특별한건 아니구요 >변수 강좌 보니까 ? 가 사용되더라구요? >?는 무슨 의미인가요? > >[분기] ([레벨]==16)?91:[분기] >[분기] ([레벨]==15)?92:[분기] >[분기] ([레벨]==14)?93:[분기] >[분기] ([레벨]<=13)?94:[분기] >@이동 [분기] > >여기서 보면 >[...  
129 흥크립트 개선점 흑곰 1578   2008-02-08 2008-03-17 04:37
글자변수 외에 숫자변수도 화면에 표시할 수 있으면 좋겠음 글자입력시 아무 것도 안썼으면 다시 입력받을 수 있도록 하면 좋겠음 글자변수도 조건문을 할 수 있으면 좋겠음 if문이 있으면 좋겠음 아이콘 변경이 되었으면 좋겠음(실은 이건 컴파일 문제이지만)...  
128 [re] 흥크립트 개선점 [3] 똥똥배 1928   2008-02-09 2008-03-17 04:37
1. 글자변수 외에 숫자변수도 화면에 표시할 수 있으면 좋겠음 이건 내부적인 문제이기도 한데, 화면에 표시할 때는 위치정보, 색 등 엄청난 데이터가 필요합니다. 글자는 길이가 있고 하니 어차피 덩치가 커서 상관없다고 생각했지만, 숫자변수는 4바이트면 ...  
127 Divx6를 받아서 인코딩을 하려는데... 에러뜸... [3] 장펭돌 2154   2008-02-09 2008-03-17 04:37
Divx 공식 홈페이지를 가보니, 6가 있길래 받아서 동영상파일 (AVI)를 열면 이렇게 에러가 뜨는군여... ----------------------------------------------------------------- Invalid VIdeo Stream DivX Converter cannot encode the in put file: C:\Document...  
126 조건분기할 때 [5] 흑곰 1745   2008-02-12 2008-03-17 04:37
&& and || or == 같다 != 같지 않다 원래 vc++ 에서 쓰는 것인데 흥크립트에도 쓰여요. (마지막 것은 확인 못해봤음) 흥크립트도 조건문을 활용하면 if문이 가능합니다. if문을 여러개 구현하다보면 그렇게 빠르진 않은 것 같습니다만 * 똥똥배님에 의해서 게...