大佬教程收集整理的这篇文章主要介绍了cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<span style="font-family: Arial,Helvetica,sans-serif; BACkground-color: rgb(255,255,255);">今天在加死亡场景的时候有,我先有一个判断,</span>
if (player->getPositionY()<0) { Director::geTinstance()->replaceScene(TransitionFade::create(0.5,overLayer::createScene())); }
判断player的坐标如果不在范围内就直接切换场景,但是当死亡之后,会有几率出现一个bug,expression hasHelement entry markedFordeletion,我查了一下,是由于schedule的重复执行,由于是在切换场景之后才产生的bug,所以有可能是以前的schedule没有注销掉,于是改变代码
if (player->getPositionY()<0) { this->unschedule(schedule_SELEctor(Stage::thisLayer_callBACk)); this->unschedule(schedule_SELEctor(Stage::addblock)); Director::geTinstance()->replaceScene(TransitionFade::create(0.5,overLayer::createScene())); }
····························我是分割线·····················································
由于前几天的时候,做了一个功能,就是在主角跳跃的时候,屏幕有一个跟随,看起来地面下降了,而主角还在屏幕中心,我是通过实时改变Layer的Y坐标实现的这个功能,但是问题来了,分数和按钮也一起动了,分数好说,直接放到背景Layer里面自加就行,但是按钮放到新的层要和这个层传输数据,于是用到了观察者模式。
首先新建一个层,叫做Button_Layer,在这个层里面放一个按钮,在点击事件里面,发布数据
NotificationCenter::geTinstance()->postNotification("jumpDown",null);
NotificationCenter::geTinstance()->addObserver(this,callfuncO_SELEctor(Stage::Button_JumpDown_Msg),"jumpDown",null);
值得一提的是,如果我们注销了这个场景,或者切换场景之前要取消订阅消息,否侧会有一些找不到对象的bug。
NotificationCenter::geTinstance()->removeAllObservers(this);
总结一句就是,shcedule和观察者的订阅消息,不用的时候要销毁。
以上是大佬教程为你收集整理的cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug全部内容,希望文章能够帮你解决cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。