为了账号安全,请及时绑定邮箱和手机立即绑定

过关场景跳转

雷哥啊,你那个过关后的场景跳转怎么弄的?你说休息时间改的,直接调用toGameScene方法,看到效果是怪物死了后又复活了,这个是怎么弄的,,我在判定怪物死完后,调用toGameScene,当怪物死了程序就崩了。。。应该是那个地方没处理,怎么弄的啊求救雷哥!!

正在回答

4 回答

我写的也是同样崩,最后我分析大概是因为ControlLayer::purge()将ControlLayer类的所有成员都释放了,tsm的内存也被回收掉了,所以导致ControlLayer::update函数中再tsm->toGameScene();就崩了。

然后:

1,在DataManager里加入成员:SceneManager* sceneManager;

2,在AppDelegate::applicationDidFinishLaunching()中创建完SceneManager对象之后加上一句:DataManager::getInstance()->sceneManager = sceneManager;

3,在ControlLayer::update中用DataManager::getInstance()->sceneManager->toGameScene();代替tsm->toGameScene();

我这么改肯定是不专业,但是这么一折腾不崩了。


1 回复 有任何疑惑可以回复我~

这个问题困扰了我好久,最后大概弄清楚了原因。应该是schudule方法的bug吧,unSchedule之后还会执行一帧update方法。这时问题就来了:在上一帧中已经释放了ControlLayer中的所有资源,所以这一帧的update方法中会报各种野指针错误(EXC_BASD_ACCESS)。

顺序大概是这样(ControlLayer1:upadte(释放资源、停止定时器) -> 创建ControLayer2 -> ControlLayer1:upadte(崩))

原因嘛,就是这样,解决方法我也太不会。我是在update开始加一句判断,if(indexLevel != DataManager::getInstance()->getLevelIndex()) return; (indexlLevel 在init方法里初始化为DataManager里的level)。虽然做法很差,但也达到效果了

1 回复 有任何疑惑可以回复我~

我也是同样的问题,toGameScene的第一句执行了就崩了,好像是关于内存的问题。不知道怎么解决。

0 回复 有任何疑惑可以回复我~

我也是,第一关打死牛高清之后程序执行场景跳转就挂掉了

0 回复 有任何疑惑可以回复我~
#1

独步丶一人 提问者

怎么解决啊。我还是没找到
2015-09-28 回复 有任何疑惑可以回复我~
#2

慕神5368544

找到办法了,ControlLayer下的purge方法里面的最后一句话, this->removeFromParent(); 这句删除了就行了。 具体原因。。。不知道。。
2015-10-03 回复 有任何疑惑可以回复我~
#3

Clayhaw 回复 慕神5368544

你这样根本没有释放场景当然不会报错。
2016-11-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

过关场景跳转

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信