中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2d-x游戲循環與調度

發布時間:2020-05-28 02:06:23 來源:網絡 閱讀:366 作者:tony關東升 欄目:游戲開發

cocos2d-x游戲循環與調度

每一個游戲程序都有一個循環在不斷運行,它是有導演對象來管理很維護。如果需要場景中的精靈運動起來,我們可以在游戲循環中使用定時器(Scheduler)對精靈等對象的運行進行調度。因為Node類封裝了Scheduler類,所以我們也可以直接使用Node中調用函數。

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宽城| 新丰县| 囊谦县| 东莞市| 西盟| 措勤县| 灌阳县| 永康市| 崇明县| 故城县| 兴义市| 广州市| 麦盖提县| 泸溪县| 浦东新区| 昭通市| 双鸭山市| 从化市| 息烽县| 阿拉善盟| 垦利县| 儋州市| 乐至县| 沙湾县| 甘德县| 迭部县| 同德县| 灵宝市| 宜阳县| 克什克腾旗| 静宁县| 潜江市| 邢台县| 琼结县| 连云港市| 安泽县| 晋宁县| 淮阳县| 洛扎县| 抚松县| 陆川县|