日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2d-x游戏循环与调度

發布時間:2025/4/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 )??梢酝V拐{度。

?

為了進一步了解游戲循環與調度的使用,我們修改HelloWorld實例。

修改HelloWorldScene.h代碼,添加update(float dt)聲明,代碼如下:

?

[html]?view plaincopy
  • 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停止。

    轉載于:https://www.cnblogs.com/iOS-Blog/p/3711263.html

    總結

    以上是生活随笔為你收集整理的cocos2d-x游戏循环与调度的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。