2011년 11월 16일 수요일

안드로이드-분노의배(스크립트 엔진)

이것만 만들고 버리는게 아니라 코드의 재사용을 위해 스크립드 엔진을 만들었다.

스크립트의 규칙에 대해 정리하면 아래와 같다.

스크립트에는 4개의 정보로 나뉜다.

pathInfo : 객체 이동 대한 정보 ( 움직이거나 크기를 변경...)

actionInfo : 사용자나 이벤트에 의한 명령을 수행하기 위한 명령의 집합


timerInfo : 시간의 순서대로 처리 해야 하는 명령의 집합 
imageInfo : 이미지를 로드하여 텍스처에 저장하기 위한 정보

각 대 분류는 xml 처럼 <tag></tag> 로 묶인다.

pathInfo
pathInfo에서 사용할수 있는 명령은 다음과 같다.

imgAngle(angle) : 이미지를 각도만큼 회전시킨다.
scale(%) : 크기를 변경한다.(%)
goAngle(angle,speed) : 정해진 각도를 속도로 움직이게 한다.
dSleep(pixel) : 거리만큼 이동될때까지 쉰다.
sleep(time) : 시간만큼 쉰다.
alpha(%) : alpha 값을 변경한다.
destroy() : 현재 이 객체를 소멸 시킨다.
moveTo(x,y) : 정해진 좌표로 순간 이동한다.
rgb(%,%,%) : r,g,b 의 %를 변화한다.
goto(index) : 위치를 이동하는데 인자는 상대적인 값이 된다.
visible(0 or 1) : 현재의 객체를 보일지 안보일지를 결정한다.
action(number) : 액션을 수행한다.


startProject(시작할파일) : 다음 스크립트를 실행한다.

예)

<pathInfo>
<1>
rgb(100,100,100)
scale(100)
alpha(0)
sleep(100)
alpha(10)
sleep(100)
alpha(20)
sleep(100)
alpha(30)
sleep(100)
alpha(40)
sleep(100)
alpha(50)
sleep(100)
alpha(60)
sleep(100)
alpha(70)
sleep(100)
alpha(70)
sleep(100)
alpha(80)
sleep(100)
alpha(90)
sleep(100)
alpha(100)
sleep(2000)
action(1)
</1>
<2>
alpha(100)
sleep(100)
alpha(90)
sleep(100)
alpha(80)
sleep(100)
alpha(70)
sleep(100)
alpha(60)
sleep(100)
alpha(50)
sleep(100)
alpha(40)
sleep(100)
alpha(30)
sleep(100)
alpha(20)
sleep(100)
alpha(10)
sleep(100)
alpha(0)
action(2)
</2>
</pathInfo>


actionInfo
터치 또는 이벤트가 일어나면 동작을 한꺼번에 한다.
timerInfo 와 동일한 동작가능 단,sleep,goto 동작만 안됨

예)
<actionInfo>
<1>
setPathInfo(99,2)
</1>
<2>
startProject(mainmenu.txt)
</2>
</actionInfo>


timerInfo
시간에 의해 발생되는 기능들
trackAction(0 or 1) : 사용자에 의한 액션이 일어나지 않도록 한다.
sleep(time) : 정해진 시간 동안 쉰다.
goto(index) : 스크립트의 인덱스를 이동한다.(상대값)
setVisibleLayer(layer,on/off) : layer를 on/off (0 or 1) 한다. (보이거나 보이지 않게)
setPathInfo(type,path number) : type객체의 path number를 변경한다.
setActionInfo(type,action number) : type객체의 action number를 변경한다.
setBackColor(r%,g%,b%) : 배경의 r,g,b %를 변경한다.
cImg(  x,  y,img,path,action,type,hit,layer,    hp,ref1,ref2) : 이미지 객체를 생성한다.
cBox(  x,  y,  0,path,action,type,hit,layer,    hp,ref1,ref2,width,height) : box 객체를 생성한다.
cTxt(  x,  y,  0,path,action,type,hit,layer,    hp,ref1,ref2,length,fontref,text) : text 객체를 생성한다.

예)
<timerInfo>
setBackColor(100,100,100)
trackAction(0)
cTxt(350,240,  0,   1,     0,  99,  1,    2,   100,   0,   0,    21,      5,Powered by AndEngine)
cImg(570,240,  1,   1,     0,  99,  1,    2,   100,   0,   0)
</timerInfo>


imageInfo
이미지의 정보를 담고있다.
id는 1 부터 증가하여야 하며 빠지면 안된다.
repeat count:-1 인 경우 무한,
texture좌표:texturex,texturey
imageInfo(id,image name,frame rate,repeat count ,texturex,texturey,가로개수,세로개수)

예)
<imageInfo>
//64*64
imageInfo(1 ,gfx/badge.png ,0 ,0 , 0, 0,     1,1)
</imageInfo>



스크립트 엔진의 동작 이해

동작은 timerInfo 부터 시작된다.

setBackColor(100,100,100) : 배경색을 흰색으로 변경한다.
trackAction(0) : 사용자에 의한 trigger를 끈다.
cTxt(350,240,  0,   1,     0,  99,  1,    2,   100,   0,   0,    21,      5,Powered by AndEngine)
: 텍스트를 생성해서 특정좌표에 표시하는데 path,action,type가 (1,0,99) 가 된다.
cImg(570,240,  1,   1,     0,  99,  1,    2,   100,   0,   0)
: 이미지를 생성해서 좌표에 표시하는데 이미지 1번(gfx/badge.png)을 이용하고 path,action,type가 (1,0,99) 가 된다.
이미지와 텍스트 모두 pathInfo <1>을 사용하게 된다.

<1>
rgb(100,100,100)
scale(100)
alpha(0)
sleep(100)
alpha(10)
sleep(100)
alpha(20)
sleep(100)
alpha(30)
sleep(100)
alpha(40)
sleep(100)
alpha(50)
sleep(100)
alpha(60)
sleep(100)
alpha(70)
sleep(100)
alpha(70)
sleep(100)
alpha(80)
sleep(100)
alpha(90)
sleep(100)
alpha(100)
sleep(2000)
action(1)
</1>

pathInfo <1>의 동작은 점차 alpha 값을 증가시키는 fade in 동작이며, 마지막에 action(1)을 둠으로서 actionInfo <1>을 수행한다.

<1>
setPathInfo(99,2)
</1>
actionInfo <1>은 type이 99인 객체의 pathInfo를 2로 변경한다.
그러면 이미지와 text의 type이 99이므로 pathInfo가 2로 변경되어 다음 동작을 수행한다.

<2>
alpha(100)
sleep(100)
alpha(90)
sleep(100)
alpha(80)
sleep(100)
alpha(70)
sleep(100)
alpha(60)
sleep(100)
alpha(50)
sleep(100)
alpha(40)
sleep(100)
alpha(30)
sleep(100)
alpha(20)
sleep(100)
alpha(10)
sleep(100)
alpha(0)
action(2)
</2>
이 동작은 fade out 동작이며 마지막에 action <2>를 수행한다.

<2>
startProject(mainmenu.txt)
</2>
다른 프로젝트를 로드하게 되므로서 이 페이지의 동작은 끝이 난다.



끝마치며

timerInfo는 전체적인 흐름을 관리하는 도구이며, 생성된 객체(텍스트,이미지,박스)들의 동작은 각각의 pathInfo로 움직이게 된다.
사용자의 터치나, 어떤 이벤트가 일어나게 되면 적절히 actionInfo를 이용하여 변경이 되도록 작업을 해야한다.

댓글 없음:

댓글 쓰기