[cocos2d-x]关于update回调,以及继承后子类调用父类的Update处理的问题
来源:互联网 发布:淘宝九牧王卫浴保真吗 编辑:程序博客网 时间:2024/05/29 09:13
问题描述:
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));
- [cocos2d-x]关于update回调,以及继承后子类调用父类的Update处理的问题
- cocos2d-x调用scheduleUpdate()不执行update()方法的解决办法
- cocos2d-x调用scheduleUpdate()不执行update()方法的解决办法
- cocos2d-x调用scheduleUpdate()不执行update()方法的解决办法
- cocos2d-x调用scheduleUpdate()不执行update()方法的解决办法
- cocos2d-x调用scheduleUpdate()不执行update()方法的解决办法
- [cocos2d-x]关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- cocos2d-x 关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- cocos2d-x 关于是否继承CCSprite,以及关于继承初始化时候的未知问题
- 关于for update的问题
- Cocos2d-x 网络线程与UI线程的同步 继承Node但是不执行Update
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题
- 关于子类继承父类后调用方法的问题
- Cocos2d-x 每一帧执行事件之 scheduleUpdate()与Update()以及schedule()定时刷新的使用
- Cocos2d-x 3.X里面的调度器和update()
- 理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题
- cocos2d-x中的父类和子类之间的继承关系
- cocos2d-x调度器原理,mainloop的Update
- POJ 1664 放苹果
- 近期使用Python的一些感想
- ZeroMQ初体验——hello world
- [LeetCode] Two Sum
- 一枚菜鸟谈谈对路由器的认识
- [cocos2d-x]关于update回调,以及继承后子类调用父类的Update处理的问题
- oracle-win7安装oracle 10g时发生”程序异常终止。发生内部错误”的提示
- Thinkpad T61显卡门的解决(更换集成显卡的主板)
- 设置adb和fastboot,让所有用户都可以执行
- oracle-ORA-12545:因目标主机或对象不存在,连接失败的解决办法
- 黑马程序员----JAVA----String类常用方法----
- android4.0和android2.3中对automatic brightness(背光调整)的策略是不一样的
- oracle-用PLSQL创建oracle的Normal用户
- 更新系统后导致的编译错误cannot find -lncurses