过关场景跳转

来源:5-3 数据管理类(下)

独步丶一人

2015-08-18 16:42

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

写回答 关注

4回答

  • 慕粉4355359
    2016-11-19 20:00:10

    我写的也是同样崩,最后我分析大概是因为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();

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


  • Clayhaw
    2016-11-14 13:12:12

    这个问题困扰了我好久,最后大概弄清楚了原因。应该是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)。虽然做法很差,但也达到效果了

  • 慕神5368544
    2015-10-03 17:43:57

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

  • 普通扑通居然
    2015-09-17 20:49:54

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

    Clayha... 回复慕神5368...

    你这样根本没有释放场景当然不会报错。

    2016-11-14 12:49:00

    共 3 条回复 >

Cocos2d-x游戏之七夕女神抓捕计划

拯救陈无码从游戏开发开始,如果你想逆袭,那么快来学习

49315 学习 · 70 问题

查看课程

相似问题