본문 바로가기

게임개발팁

cocos2d-X 게임 만들기 2편


cocos2d-X 게임 만들기 1편에 이어서 2편에서는 스프라이트를 추가해 보겠습니다.

스프라이트를 추가하기 전에 스프라이트로 사용할 이미지가 필요할 것입니다. 아래의 이미지 리소스를 받아 주세요.



위의 이미지 파일을 받은 다음 XCode에서 Resources 그룹에 드래그&드롭을 하여 복사를 합니다.


코드를 작성할 준비가 끝났으니 이제 코드를 작성해 보겠습니다 :) 우선 원작 게임에 충실하기 위해서 배경화면을 하얀색으로 변경해 보겠습니다. CCLayer를 상속 받아 GameScene을 만들었는데 CCLayerColor를 상속하여 만들면 배경화면 색상을 아주 쉽게 바꿀 수 있습니다.

GameScene.h 파일과 GameScene.cpp 파일을 아래와 같이 수정합니다.

//: GameScene.h
//: 배경화면 색상 변경을 위해서 CCLayerColor를 상속받는다
class GameScene : public cocos2d::CCLayerColor
{
    ...
};

// GameScene.cpp
// 레이어를 초기화합니다.
bool GameScene::init()
{
    // CCLayerColor 의 initWithColor 초기자를 호출해 
    // 배경화면을 하얀색으로 변경한다.
    // 색상 설정은 ccc4(R, G, B, A) 매크로를 사용한다.
    if( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) )
    {
        // 초기화에 실패하면 false를 반환합니다.
        return false;
    }
    return true;
}

코드의 설명은 주석을 참고하여 주세요. 위의 코드를 작성한 다음 컴파일 후 실행하면 아래와 같이 하얀 화면이 나옵니다.



스프라이트를 추가하기 위해서 GameScene.h파일과 GameScene.cpp 에 setPlayerSprite()를 추가합니다. 그리고 초기자에서 setPlayerSprite()를 호출해 화면에 스프라이트가 출력되도록 코드를 작성하겠습니다. 편의상 전체 코드를 올리도록 하겠습니다.

//
//  GameScene.h
//  NinjaGame
//
//  Created by SUNG CHEOL KIM on 11. 10. 12..
//  Copyright 2011 individual. All rights reserved.
//

#ifndef NinjaGame_GameScene_h
#define NinjaGame_GameScene_h

#include "cocos2d.h"

//: 배경화면 색상 변경을 위해서 CCLayerColor를 상속받는다
class GameScene : public cocos2d::CCLayerColor
{
public:
    //: 초기자
    //: 아이폰용 cocos2d에서는 id를 반환하지만 cocos2d-x에서는 bool을 반환해야 합니다.
    virtual bool init();
    
    //: CCScene을 반환하는 클래스 메서드
    //: 아이폰에서 cocos2d로 게임을 만들 때 CCLayer를 상속받은 커스텀레이어에서 
    //: 이런 식으로 클래스 메서드를 만들어서 씬을 많이 반환해 보셨을 겁니다.
    static cocos2d::CCScene* scene();
    
    
    //: static node() 메서드를 구현합니다.
    LAYER_NODE_FUNC(GameScene);
    
private:
    //: 플레이어의 스프라이트를 추가한다.
    void setPlayerSprite();
};
#endif

//
//  GameScene.cpp
//  NinjaGame
//
//  Created by SUNG CHEOL KIM on 11. 10. 12..
//  Copyright 2011 individual. All rights reserved.
//

#include "GameScene.h"

//using namespace cocos2d 의 약자 매크로입니다.
USING_NS_CC; 

CCScene* GameScene::scene()
{
    // GameScene레이어를 담아 반환할 씬을 하나 만듭니다.
    // 자동 메모리 해제 되는 인스턴스입니다.
    CCScene *scene = CCScene::node();
    
    // 레이어를 생성합니다.
    GameScene *layer = GameScene::node();
    
    // 레이어를 자식으로 씬에 추가합니다.
    scene->addChild(layer);
    
    return scene;
}

// 레이어를 초기화합니다.
bool GameScene::init()
{
    // CCLayerColor 의 initWithColor 초기자를 호출해 
    // 배경화면을 하얀색으로 변경한다.
    // 색상 설정은 ccc4(R, G, B, A) 매크로를 사용한다.
    if( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) )
    {
        // 초기화에 실패하면 false를 반환합니다.
        return false;
    }
    
    //: 플레이어 스프라이트를 화면에 추가합니다.
    this->setPlayerSprite();
    
    return true;
}

void GameScene::setPlayerSprite()
{
    //: 화면 좌측, 중간에 놓기 위해서 화면 크기를 이용합니다.
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
    //: 플레이어 이미지를 불러와 스프라이트를 만듭니다.
    //: CCRectMake는 스프라이트의 영역을 만듭니다.
    //: 이미지 크기와 동일하게 만들어 줍니다.
    CCSprite *player = CCSprite::spriteWithFile("Player.png", 
                                                CCRectMake(0, 0, 27, 40));
    //: 플레이어의 위치를 정해줍니다.
    player->setPosition( ccp(player->getContentSize().width/2, 
                             winSize.height/2) );
    
    //: GameScene에 스프라이트를 추가합니다.
    this->addChild(player);
}

코드 설명은 주석을 참고해 주세요. :) 아래는 컴파일 결과입니다.



이번 편은 여기서 마치고 다음 편에서는 스프라이트를 움직여 보도록 하겠습니다^^

'게임개발팁' 카테고리의 다른 글

cocos2d-X 게임 만들기 4편  (4) 2011.11.09
cocos2d-X 게임 만들기 3편  (11) 2011.10.13
cocos2d-X 게임 만들기 1편  (14) 2011.10.12
iOS OpenGL | ES 튜토리얼 3편  (3) 2011.10.02
iOS OpenGL | ES 튜토리얼 2편  (12) 2011.09.27