프로그래밍/Corona SDK2013. 8. 27. 16:28

* 비균일 스프라이트란


 스프라이트는 알다시피 여러 장의 그림이 번갈아가며 보여지면서 움직이는 것인데, 프로그램상에서 각각의 그림의 크기가 전부 다른 경우는 좀 더 처리하기가 어렵다. 이걸 각 그림에 대해서 크기와 위치 정보도 함께 넣어 처리하는 스프라이트가 비균일 스프라이트이다. 



* 비균일 스프라이트 만들기


 먼저 외부 스프라이트 시트 데이터 파일을 준비한다. 내용은 다음과 같이 만들어진다. 


local 변수4 = {}


변수4.sheet = 

{

frames = {

{

- 이름1

x = 출력될 가로위치,

y = 출력될 세로위치,

width = 출력될 가로폭,

height = 출력될 세로폭,

sourceX = 원본에서의 가로위치,

sourceY = 원본에서의 세로위치,

sourceWidth = 원본에서의 가로폭,

sourceHeight = 원본에서의 세로폭

}                                                    --> 사용하는 프레임수만큼 반복된다

}  --> frames = {} 종료


sheetContentWidth = 이미지내 사용영역 가로폭

sheetContentHeight = 이미지내 사용영역 세로폭


}      --> 변수4.sheet = {} 종료


return 변수4    --> 변수4에 들어간 스프라이트의 데이터는 여기서 실행파일로 넘어가면서 변수1에 들어가게 된다.



 다음으로 실행파일에서 다음과 같이 하여 스프라이트 시트 파일의 데이터를 불러와 사용한다.


local 변수1 = 

{

frames = require("스프라이트파일명").frames

--> 이름이 지정된 외부 스프라이트 데이터 파일을 참조해 변수명1로 접근한다. 다만 파일명에 .lua 확장자는 붙이지 않는다.

}


local 변수3 = graphics.newImageSheet( "이미지파일명.png", 변수1)

local 변수2 = { name = "스프라이트파일명", start = 1, count = 8, time = 1000 }

local 객체명 = display.newSprite( 변수3, 변수2 )


객체명 : setSequence("시퀀스데이터명")

   --> 애니메이션 시퀀스가 할당된 스프라이트(객체)를, 다른 애니메이션 시퀀스로 바꾸어 넣는다

         (참고 : http://stackoverflow.com/questions/17887014/changing-animation-object-in-corona)


객체명 : setFrame(math.random(1 객체명.numFrames))

   --> 필요할 경우, 할당된 애니메이션 시퀀스 중 특정 프레임부터 재생을 시작하도록 한다


객체명 : play()

   --> 스프라이트 객체의 재생을 시작한다



 스프라이트 파일의 변수4에 기록된 스프라이트 데이터는 실행파일로 넘어오면서 변수1에 저장된다. 이 변수 1을 다음과 같이 액세스함으로써, 스프라이트 데이터를 읽어 사용하거나 변경할 수 있다.


변수4.sheet = 

{

frames = {

{

- 이름1

x = 출력될 가로위치,

y = 출력될 세로위치,

width = 출력될 가로폭,

height = 출력될 세로폭,



 위의 스프라이트 데이터에서, 변수1 안에 저장된 frames{} 안의 데이터값들은 다음과 같이 읽거나 변경하면 된다.


print(options.frames[1].x)

print(options.frames[1].y)

print(options.frames[1].width)

print(options.frames[1].height)    --> x, y, width, height 값을 각각 읽어 출력한다. 사용할 때에도 이렇게 사용하면 된다.


options.frames[1].x = 999     --> x의 값에 999를 넣는다. 



Posted by windship