[cocos2d-x] 간단한 게임 만들기 (2)

     




지난 포스팅을 완료하셨다면 실행했을 때 다음과 같은 화면이 나올겁니다.





오홋.... 뭔가 그럴 듯 해 보이지만 터치하면 아무일도 일어나지 않죠... 이제부터 만들어야 할 과제입니다.


먼저 지난 포스팅에서 분명 백그라운드를 화면 아래로 맞췄는데 실행하면 꽉찬 그림이 아닌걸 알 수 있습니다. AppDelegate.cpp에서 다음 코드를 수정합니다.




위와 같이 코드를 바꾸고 다시 실행하면 화면이 풀로 차는것을 알 수 있습니다. 참고로 AppDelegate::applicationDidFinishLaunching()은 앱이 최초에 실행되었을 때 실행되어지는 메소드입니다.


다음은 앞서 설명했듯이 디바이스 화면에 알맞은 그림을 찾아서 뿌려주는 코딩을 해야합니다. 




현재 디바이스의 화면을 읽어서 원하는 위치의 폴더에서 리소스를 빼옵니다. 테스트 해보시려면 아이폰 4, 5, 6, 6plus를 번갈아 가면서 실행시켜봅니다. 


제대로 실행이 되나요?! 이 부분은 약간의 버그가 있는데 아래 코드를 HelloWorldScene.cpp에 추가해야 제대로 나옵니다.




기본적으로 생성되는 소스코드의 이름은 HelloWorldScene입니다. 예제로 만들어진 소스코드 이름이기 때문에 뭔가 우리것으로 만들어 줄 필요가 있습니다. 우린 코코스 스튜디오에서 MainScene이란 이름으로 메인화면을 사용했기 때문에 MainScene이라고 이름을 바꾸어 줍시다.





메뉴에서 돋보기를 눌러서 HelloWorldScene이 사용된 곳을 MainScene으로 바꿔주고 HelloWorld 역시 MainScene으로 바꿔줍니다. 이렇게 소스파일에 사용된 텍스트를 간편하게 바꿀 수 있습니다. 다 바꾸고 나서는 실제로 소스 파일의 이름을 바꿔주시면 됩니다.





자 초기 설정은 끝났구요... 이제 우리가 만들었던 냥이랑 초밥을 코드에서 사용할 수 있게 커스텀 클래스를 만들어야 합니다. 다시 코코스 스튜디오로 돌아갑니다. 




냥이와 초밥 csd를 누르고 Node를 누르면 오른쪽에 Advanced가 나옵니다. 여기서 Custom Class를 선언해주면 code에서 클래스를 만들 수 있습니다. 왜 사전에 이작업을 하지 않았냐면.. 커스텀 클래스를 선언해놓고 사용하지 않는다면 프로젝트가 실행되지 않거든요!! 그래도 만든 화면 한번 봐보려고 나중에 추가하는 ^^.... 냥이는 Character, 초밥은 Piece 라고 설정한뒤 다시 퍼블리싱 합니다.


이제 코드에서 Character 클래스를 만듭니다.







새로운 Character 클래스를 만들고 (헤더파일 포함) 헤더파일에 Node를 상속받는다고 정의합니다. 코코스 스튜디오에서 선언한 커스텀 클래스를 사용하기 위해서는 해당 클래스와 Reader라는 특수한 클래스가 필요합니다. CharacterReader클래스도 생성합니다.




코코스 스튜디오에서 커스텀 클래스를 사용할 때는 항상 이와같이 Reader소스가 필요합니다. 내용은 항상 똑같기 때문에 하나 만들어놓고 복사해서 쓰시면 됩니다. Reader코드의 내용은 그렇게 중요하지 않지만 살펴보면 createNodeWithFlatBuffers가 코코스스튜디오에서 셋팅한 클래스 속성을(nodeOptions)을 그대로 가지고 노드를 생성합니다. getInstance()같은 경우는 클래스를 하나만 생성해서 어디서든지 사용하기 위한 싱글톤 디자인 코드입니다. purge는 이 클래스를 더이상 사용하지 않아 삭제해주는 코드입니다. 즉 코코스에서 설정한 클래스 옵션대로 클래스를 만들어주고 사용하지 않으면 삭제해주는 소스라고 보시면 됩니다.


같은방법으로 Piece와 PieceReader를 만들어줍니다. 이제 MainScene.app에서 이 두개의 클래스를 사용한다고 알려주면 완성입니다.




자 위와같이 설정하고 실행을 해봅시다. 정상적으로 싱행이 된다면 설정 끝!


이제 초밥을 쌓는 로직을 구현합시다. 초밥은 Piece 클래스로 선언되어있기 때문에 여러개의 초밥을 관리하기 위해서는 이 클래스로 만들어진 벡터가 있으면 편합니다. MainScene에 다음과 같은 코드를 추가합니다.




init() 메소드에서 rootNode의 pieceNode라는 이름을 가진 자식노드를 불러오는 것이 있는데, 화면을 만들때 빈 노드를 현재 초밥 위에 올렸던 것 기억하시나요? 그 노드의 이름이 pieceNode입니다. 초밥을 쌓기위해서 만들었다고 저번 포스팅에서 설명했었는데~ 지금 사용합니닷!


자 생각해봅시다. 우리는 초밥 탑을 만드려고 합니다. 하나의 초밥 위에 초밥 위에 초밥.... 을 위치시키려면 무엇이 필요할까요? 바로 초밥의 높이가 아닐까요? 


Piece 클래스에서 초밥의 높이를 구하는 메소드를 하나 만들어봅시다.




getSpriteHeight()라는 초밥의 높이를 반환하는 메소드를 만들었습니다!!

이제 메인에서 초밥을 쌓아볼까요~!




헤더에 float rooHeight를 선언하는 것을 잊지 맙시다. 


이제 초밥탑이 잘 쌓이는지 실행해봅시다.




초밥이 잘 쌓였다면 성공!


터치이벤트와 초밥을 날려버리는건 다음 포스팅에~!!


반응형

댓글

Designed by JB FACTORY