* 비균일 스프라이트란
스프라이트는 알다시피 여러 장의 그림이 번갈아가며 보여지면서 움직이는 것인데, 프로그램상에서 각각의 그림의 크기가 전부 다른 경우는 좀 더 처리하기가 어렵다. 이걸 각 그림에 대해서 크기와 위치 정보도 함께 넣어 처리하는 스프라이트가 비균일 스프라이트이다.
먼저 외부 스프라이트 시트 데이터 파일을 준비한다. 내용은 다음과 같이 만들어진다.
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를 넣는다.
'프로그래밍 > Corona SDK' 카테고리의 다른 글
코로나 SDK - 테이블 #2 (번역글) (0) | 2013.08.28 |
---|---|
코로나 SDK - 테이블 (0) | 2013.08.27 |
코로나 SDK - XML 파싱, 데이터값 가져오기 (0) | 2013.08.27 |
코로나 SDK - 기본적인 그림출력, 균일 스프라이트 (0) | 2013.08.27 |
코로나 SDK - 기본 (0) | 2013.08.27 |