[cocos2d-x]關於update回調,以及繼承後子類調用父類的Update處理的問題

問題描述:

GameObject - > AIPlayer

在基類gameobject中有一個update(float dt),就是默認schedule後每偵執行的方法,然後AIPlayer繼承了go,也實現了Update(float dt),通過在AIPlayer裏面調用父類的update,因爲某些共性的物體判斷,例如HP <= 0則destroy這個物體,以及如果是Player則判斷輸贏等情況。

那麼我期望的處理是在GameObject中如果HP <= 0 ,物體死亡,先淡化 -> 消失後調用一個selector方法回調清理緩存並且判斷是否是AIPlayer或者Player則判斷輸贏。

結果:

並沒有我們如上描述期待的那樣,因爲AIPlayer中的子類指針調用父類的方法(可以執行),但在父類中回調一個selector,則這個selector不會調用。

CCFiniteTimeAction* actionDone = CCCallFuncN::create(this, callfuncN_selector(GameObject::destroy));

如上這句就是在GameObject的Update方法中當HP<= 0時候會執行的,因爲通過子類指針去安排回調,但回調方法卻是父類GameObject的方法,回調其實還是用子類指針,所以找不到該方法,並沒有被執行,不知此理解對否。


解決方法:

如果AIPlayer需要每偵判斷AIPlayer專屬的事情,那麼我們不實現父類實現了的Update,添加新的方法

void UpdateAI(float dt);

然後通過在AIPlayer初始化時候執行schedule安排每偵執行該方法,同時因爲父類也在初始化時候執行schedule,所以父類的update也會被執行。

this->schedule(schedule_selector(AIPlayer::UpdateAI));



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章