챕터 2 - 스프라이트를 움직이는 방법

|

챕터 1 - 스프라이트를 추가하는 방법

 

챕터1 에서 우리는 Player 캐릭터를 Scene 에 추가하는 작업을 했었다.

하지만 히어로는 홀로 있다. 우리는 적들을 추가할 생각이다.

적들을 이동하는 함수

void addTarget()와

이동이 끝난 적들을 사라지게 하는 함수

void spriteMoveFinished(CCNode * sender);

를 추가할 생각이다.

void addTarget()void spriteMoveFinished(CCNode * sender);  HelloWorldh.h 에 추가하고

class HelloWorld : public cocos2d::CCLayerColor

{

public:

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone

    virtual bool init(); 

 

    // there's no 'id' in cpp, so we recommend returning the class instance pointer

    static cocos2d::CCScene* scene();

   

    // a selector callback

    void menuCloseCallback(CCObject* pSender);

   

    // implement the "static node()" method manually

    CREATE_FUNC(HelloWorld);

    //addTarget 함수 추가( 생성)

    void addTarget();

    //스프라이트 제거

    void spriteMoveFinished(CCNode * sender);

};

아래 소스를 HelloWorldScene.cpp에 추가하자(그리고 using namespace cocos2d; 를 맨 위에 추가하는 건 잊지말자.) ->USING_NS_CC;

addTarget 추가

SpriteMoveFinished 추가

1. rand 함수는 c std 함수를 사용한다.

2. YES , NO 는 true , false 이다

3. callback 함수를 사용할수 있다. (cocos2d에서는 selector 에 대응됨)

cocos2dx\include\selector_protocol.h -> 이안에 정의 되어있음

  • schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

  • callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)

  • callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)

  • callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)

  • callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)

  • menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)

  • event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)

  • compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)

이것들은 callbck 함수 정의에 의해서 사용할수 있다. 예를들면

CCTimer::initWithTarget 은 두번째 인자가 SEL_SCHEDULE 타입이다.

bool initWithTarget(CCObject *pTarget, SEL_SCHEDULE pfnSelector);

우리는 schedule_selector(_SELECTOR)을사용할수있다.

우리는 적들을 생성하는 함수를 1초에 한번 호출하도록 설정할수 있다.

bool HelloWorld::init()의 맨 아래에 (return true; 바로 위) 아래 소스를 추가하자

//gameLogic 함수를 매초마다 실행

this->schedule(schedule_selector(HelloWorld::gameLogic),1.0f);

아래에 소스도 추가하자

HellWorldScene.h 에는 void gameLogic(float dt);을 추가하고

HellWorldScene.cpp에는 아래 소스를 추가하자

void HelloWorld::gameLogic(float dt)

{

   this->addTarget();

}

 

 

 

 

Trackback 0 And Comment 0