[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));



原创粉丝点击