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를 사용하는 경우가 많습니다.
프레임마다 호출되는 것이 부담을 갈 때는 위에 함수를 사용하여
원하는 시간마다 호출되게 하는 것이 바람직 합니다.
'- cocos2d-x ' 카테고리의 다른 글
[ cocos2d-x] cocos2d-x에서 지원하는 Texture 포맷 (0) | 2016.09.30 |
---|---|
[ cocos2d-x 3.9 ] ui::EditBox Keyboard 활성/비활성 이벤트 (0) | 2015.12.23 |
[ cocos2d-x 3.9 ] Android에서 WebView사용시 문제점들 해결 (0) | 2015.12.23 |
[ cocos2d-x 3.9 ] cocos2d-x에서 Thread 쉽게 이용하기. (6) | 2015.12.22 |
[ cocos2d-x 3.9 ] Sprite Copy 활용하기 (앱 속도 및 메모리 최적화) (1) | 2015.12.09 |