Managing State Between Scenes
이게 왜 애매하냐 하면 대부분의 스토리보드 scene들이 각 모듈별로 (e.g. scene1.lua, scene2.lua) 관리 되고 이렇게 다른 파일들간에 왔다 갔다 할 때 어떻게 파일들간에 데이터를 공유할 것인지를 다루는게 쉽지는 않기 때문이죠. 특히 scene들이 어느때든지 create 되고 destory 될 수 있기 때문에 더 그렇습니다.
오늘의 튜토리얼에서 저는 scene들 사이에서 데이터를 공유할 수 있는 몇가지 방법을 보여드릴 겁니다. 그리고 여러 scene들의 로딩과 unloading 을 거치면서도 여러분 앱 안에서 singular overall "state"를 관리하는 방법들에 대해서도 보실 수 있을 겁니다.
Parameter Passing
아래 예제에서 우리는 score 변수를 gameplay scene에서 gameover scene으로 pass 할 겁니다.
gameplay.lua
storyboard.gotoScene( "gameover", {
effect = "fade",
time = 800,
params = {
score = 100
}
})
-- ...
gameover.lua
function scene:enterScene( event )
local score = event.params.score
print( "You scored: " .. score )
end
scene:addEventListener( "enterScene", scene )
-- ...
Persistent Variables
이런 경우 global 변수를 사용하거나 (그렇게 추천할 문한 방법은 아닙니다.) 혹은 모든 scene에서 access 가능한 스토리보드 객체에 attach 되는 state 테이블을 생성하실 수 있습니다. (모든 scene들은 반드시 storyboard 모듈을 require 합니다.)
아래에 global 변수를 사용하지않고 모든 scene들에서 접근 가능한 score 프로퍼티를 어떻게 사용하는지에 대한 예제가 있습니다.
main.lua
storyboard.state = {}
storyboard.state.score = 0
-- ...
gameplay.lua
-- ...
storyboard.state.score = storyboard.state.score + 100;
storyboard.gotoScene( "gameover", {
effect = "fade",
time = 800
})
-- ...
gameover.lua
-- ...
function scene:enterScene( event )
print( "Your score is: " .. storyboard.state.score );
end
scene:addEventListener( "enterScene", scene )
-- ...
모든 scene들은 require( “storyboard” )를 반드시 해야 됩니다. 그러면 그 scene들은 common object를 share 하게 되는 거죠. main.lua에서 state 테이블을 선언했습니다. 그러면 그 테이블에 원하는 만큼의 변수를 추가할 수 있게 됩니다. 그 변수들은 require( “storyboard” )를 한 모든 모듈에서 접근 가능하게 되는 것이죠. global namespace를 사용해서 소스를 지저분하게 하지 않고서두요.
scene들 사이에 데이터를 공유하는 다른 방법들도 있을 겁니다. 위에 제시한 방법은 저희들이 추천드리는 방법입니다. 여러분들이 사용하시는 multiple modules and scenes 사이에서 데이터를 share 하는 방법은 뭐가 있습니까?
'Corona SDK > Corona Doc' 카테고리의 다른 글
원근감을 주는 parallax scrolling 구현하기 (0) | 2012.10.18 |
---|---|
Sprite 로 애니메이션 표현하기와 그 methods 들 (0) | 2012.10.11 |
코로나에서 외부 모듈은 어떻게 작동 될까? (0) | 2012.08.29 |
스토리 보드 기본 사용법 (1) | 2012.08.23 |
메모리 부족 경고 시 처리 방법 (2) | 2012.08.17 |
Storyboard: Scene Purging vs. Removal (0) | 2012.08.02 |
Tap 이벤트로 간단하게 touch 감지하기 (0) | 2012.07.26 |
System Events 사용해서 앱의 현 상태 저장하기 (0) | 2012.07.20 |
Best Practices for Organizing Projects (2) | 2012.07.11 |
코로나에서 객체와 변수 확실하게 제거하기 (0) | 2012.07.04 |