2015년 6월 17일 수요일

Corona SDK - Flappy Bird 예제 분석하기


Corona SDK를 익숙하게 익히자면 예제를 몇개 따라해 보면 금방 늘것 같아서 시도해 보았습니다.
Flappy Bird는 키하나로 게임하는 단순한 게임입니다.


아래 유투브 영상을 보면서 따라하면 됩니다.
사용한 소스도 영상 아래보면 link가 있으니 참고하면 됩니다.

7개의 영상으로 되어 있습니다.
https://www.youtube.com/watch?v=qHIZLfcDkUo

소스는 여기에서 받을 수 있습니다. dropbox에 가입하지 않아도 받을 수 있습니다
https://www.dropbox.com/s/rhujlp2d3zljhck/Flappy%20Bat%20-%20Storyboard.zip

여기에서는 소스를 한번 분석해 보았습니다.




배경과 FLAPPY BAT 애니매이션 옆에 moving fly sprite, start버튼 아래 선인장 등으로 구성되어있습니다.
그리고 start를 누르면 게임룰이 나오는 화면 나오고

진짜 본격적인 게임이 시작되고

죽으면 다시 시작화면이 나오게 됩니다.

화면 크기 설정에 관한 부분은 config.lua에서 담당하게 됩니다.

시작은 main.lua에서 항상 시작합니다.
main.lua 는 start 스토리보드 Scene를 실행시킵니다. (storyboard.gotoScene( "start" ))
start Scene는 아래 화면이 됩니다.

start.lua 를 살펴보면 createScene에서 bg.png 배경, title.png "FLAPPY BAT"글씨, platform.png, start_btn.png, bat.png 를 screenGroup에 불러들입니다.
enterScene()에서는 start이미지에 start:addEventListener("touch", startGame)
touch 이벤트에 startGame을 등록하여 다음 game Scene로 넘어가도록 되어있습니다.
storyboard.gotoScene("game")

배경등 Scene를 모두 로딩후 touch 시 flyUp 함수가 호출 되도록 합니다.
즉 game Scene가 시작되면 아래와 같은 화면이 나오고 실제 touch를 하기전 까지는 게임 진행을 안하게 되는데 시작시키는 touch를 누르면 flyUp에서 시작 시키게 됩니다.


Runtime:addEventListener("touch", flyUp)
flyUp에서는 위아래 길막이를 1초마다 생성시키는 타이머를 등록합니다.
그리고 나서 y좌표를 위쪽으로 힘을줘서 위치 올립니다. player:applyForce(0, -600, player.x, player.y)
addColumnTimer = timer.performWithDelay(1000, addColumns, -1)
그리고 주기적으로 좌측으로 moveColumns를 호출하면서 길막이를 좌측으로 이동시킵니다.
moveColumnTimer = timer.performWithDelay(2, moveColumns, -1)
moveColumns에서 길막이를 좌측으로 이동시킨뒤 좌표가 화면에서 사라지면 객체를 제거하고 점수를 올립니다.
충돌은 addBody를 넣은 이미지들만 충돌 검사를 하게됩니다.
충돌 되었을때는 Runtime:addEventListener("collision", onCollision) 여기 이벤트가 호출되면서 게임이 중지됩니다. 그리고 restart Scene를 호출합니다.
storyboard.gotoScene( "restart" )

restart.lua에서는 지금까지것과 동일하게 점수를 뿌려주는것 외에 특이한것은 없습니다.

댓글 없음:

댓글 쓰기