您好,登錄后才能下訂單哦!
cocos2d-x游戲循環與調度
Node中調用函數主要有:
void scheduleUpdate ( void )。每個Node對象只要調用該函數,那么這個Node對象就會定時地每幀回調用一次自己的update(float dt)函數。
void schedule ( SEL_SCHEDULE selector, float interval )。與scheduleUpdate函數功能一樣,不同的是我們可以指定回調函數(通過selector指定),也可以更加需要指定回調時間間隔。
void unscheduleUpdate ( void )。停止update(float dt)函數調度。
void unschedule ( SEL_SCHEDULE selector )。可以指定具體函數停止調度。
void unscheduleAllSelectors ( void )。可以停止調度。
為了進一步了解游戲循環與調度的使用,我們修改HelloWorld實例。
修改HelloWorldScene.h代碼,添加update(float dt)聲明,代碼如下:
class HelloWorld : public cocos2d::Layer { 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停止。
更多精彩內容請關注史上最牛的cocos2d-x課程
《cocos2d-x手機游戲開發實戰》直播課程第一期
報名Cocos2d-x直播課程還送關東升老師iOS終身會員。
課程鏈接:http://edu.51cto.com/pack/view/id-13.html
會員鏈接:http://edu.51cto.com/member/id-3.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。