Node中調用函數主要有:html
void scheduleUpdate ( void )。每一個Node對象只要調用該函數,那麼這個Node對象就會定時地每幀回調用一次本身的update(float dt)函數。函數
void schedule ( SEL_SCHEDULE selector, float interval )。與scheduleUpdate函數功能同樣,不一樣的是咱們能夠指定回調函數(經過selector指定),也能夠更加須要指定回調時間間隔。this
void unscheduleUpdate ( void )。中止update(float dt)函數調度。spa
void unschedule ( SEL_SCHEDULE selector )。能夠指定具體函數中止調度。.net
void unscheduleAllSelectors ( void )。能夠中止調度。code
爲了進一步瞭解遊戲循環與調度的使用,咱們修改HelloWorld實例。orm
修改HelloWorldScene.h代碼,添加update(float dt)聲明,代碼以下:htm
[html] view plaincopy對象
class HelloWorld : public cocos2d::Layer blog
{
public:
... ...
virtual void update(float dt);
CREATE_FUNC(HelloWorld);
};
修改HelloWorldScene.cpp代碼以下:
bool HelloWorld::init()
{
... ...
auto label = LabelTTF::create("Hello World","Arial", 24);
label->setTag(123); ①
... ...
//更新函數
this->scheduleUpdate(); ②
//this->schedule(schedule_selector(HelloWorld::update),1.0f/60); ③
return true;
}
voidHelloWorld::update(float dt) ④
{
auto label =this->getChildByTag(123); ⑤
label->setPosition(label->getPosition()+ Point(2,-2)); ⑥
}
void HelloWorld::menuCloseCallback(Ref*pSender)
{
//中止更新
unscheduleUpdate(); ⑦
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM ==CC_PLATFORM_IOS)
exit(0);
#endif
}
爲了可以在init函數以外訪問標籤對象label,咱們須要爲標籤對象設置Tag屬性,其中的第①行代碼就是設置Tag屬性爲123。第⑤行代碼是經過Tag屬性得到從新得到這個標籤對象。
爲了可以開始調度還須要在init函數中調用scheduleUpdate(見第②行代碼)或schedule(見第③行代碼)。
代碼第④行的HelloWorld::update(floatdt)函數是在調度函數,精靈等對象的變化邏輯都是在這個函數中編寫的。咱們這個例子很簡單只是讓標籤對象動起來,第⑥行代碼就是改變它的位置。
爲了省電等目的,若是再也不使用調度,必定不要忘記中止調度。第⑦行代碼unscheduleUpdate()就是中止調度update,若是是其餘的調度函數能夠採用unschedule或unscheduleAllSelectors中止。