반응형

schedule는 많은 곳에서 사용하게 됩니다.

특히 반복적으로 수행해야 하는 곳에서 사용하게 되는데

예를들어 게임내에 시계를 표시해주어야 한다고 가정 했을 때

1초에 한번씩 반복적으로 호출 되면 좋겠죠?


그럴때 사용하는것이 schedule 입니다.

schedule를 사용하는 방법에는 여러가지가 있지만 그중에서 2가지만 사용해 보도록 하겠습니다.

첫번째 사용자가 반복되는 시간을 마음대로 조절할 수 있는 방법 입니다.


[사용자가 원하는대로 호출]

bool HelloWorld::init()

{

    //////////////////////////////

    // 1. super init first

    if ( !Layer::init() )

    {

        return false;

    }

    

    this->_time = 100.0f;

    

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

    

    return true;

}


1초마다 한번씩 gameTime을 호출 합니다.


void HelloWorld::gameTime(float dt)

{

    --this->_time;

    CCLOG("Game Time: %d", (int)this->_time);

    if (this->_time <= 0) {

        CCLOG("Game Over!");

        this->unschedule(schedule_selector(HelloWorld::gameTime));

    }

}


호출 될때마다 dt만큼 감소시켜주고 0이 되면 스케줄을 중지 합니다.



[매 프레임 마다 호출]

bool HelloWorld::init()

{

    //////////////////////////////

    // 1. super init first

    if ( !Layer::init() )

    {

        return false;

    }

    

    this->_time = 100.0f;

 

    this->scheduleUpdate();


    return true;

}


기본적으로 모든 노드에는 update함수가 있으며 이를 오버라이드 해주면 된다.


    virtual void update(float dt) override;


노드에 있는 update함수를 사용할 때 


void HelloWorld::update(float dt)

{

    this->_time -= dt;

    CCLOG("Game Time: %d", (int)this->_time);

    if (this->_time <= 0) {

        CCLOG("Game Over!");

        this->unscheduleUpdate();

    }

}


동일하게 dt만큼 감소시켜 주면 초당 1씩줄어드는 효과를 볼 수 있다.



둘중 어느 것을 사용해도 되며 

편의를 위해 update를 사용하는 경우가 많습니다.


프레임마다 호출되는 것이 부담을 갈 때는 위에 함수를 사용하여 

원하는 시간마다 호출되게 하는 것이 바람직 합니다.


반응형

+ Recent posts