• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Cocos2d-x replaceScene 导致app崩溃

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:12:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在将我的 iOS 游戏从 Cocos2d 移植到 Cocos2d-x。 我还不是最擅长 C++,所以我无法自己调试!

我所拥有的是两个场景的简单场景,一个在运行时加载以显示介绍,然后加载另一个场景,第一个介绍场景由:

//Create a scene. it's an autorelease object
CCScene *pScene = landingScene::scene();
// Run intro scene
pDirector->runWithScene(pScene);

现在加载后,一切正常,直到我尝试通过运行替换该场景:

CCDirector::sharedDirector()->replaceScene(mainScene::scene());

只要我调用它,应用程序就会断言并给出以下消息:

Assertion failed: (index<=arr->num),functionccArrayInsertObjectAtIndex, xxx/libs/cocos2dx/support/data_support/ccCArray.cpp, line 153.

我去线路查了一下,内容是这样的:

/** Inserts an object at index */
void ccArrayInsertObjectAtIndex(ccArray *arr, CCObject* object, unsigned int index){
    CCAssert(index<=arr->num, "Invalid index. Out of bounds");
    CCAssert(object != NULL, "Invalid parameter!");
...
}

这是我的介绍(着陆)场景 .h 文件的内容:

#ifndef __LANDING_SCENE_H__
#define __LANDING_SCENE_H__

// When you import this file, you import all the cocos2d classes
#include "cocos2d.h"
#include "GameState.h"

class landingScene : public cocos2d::CCLayer {
public:
    landingScene();
    ~landingScene();
    void loadGame();
    static cocos2d::CCScene* scene();
private:
    //The game state Singleton
    GameState *sharedGameState;
};

还有.cpp文件:

#include "landingScene.h"
#include "SimpleAudioEngine.h"
#include "mainScene.h"
#include "introScene.h"

using namespace cocos2d;
using namespace CocosDenshion;

landingScene::landingScene(){
    setTouchEnabled( true );

    //Load some sprites here, removed it for simplicity

    //This is where the app crashes
    landingScene::loadGame();
}

landingScene::~landingScene(){
}

CCScene* landingScene::scene(){
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();

    // add layer as a child to scene
    CCLayer *layer = new landingScene();
    scene->addChild(layer);

    return scene;
}

void landingScene::loadGame(){
    CCDirector::sharedDirector()->replaceScene(mainScene::scene());
}

这是我试图展示的主要场景的内容:

#ifndef _MAIN_SCENE_H_
#define _MAIN_SCENE_H_

//When you import this file, you import all the cocos2d classes
#include "cocos2d.h"
#include "GameState.h"

class mainScene : public cocos2d::CCLayer {
public:
    ~mainScene();
    mainScene();
    static cocos2d::CCScene* scene();
private:
    GameState *sharedGameState;
};
#endif // _MAIN_SCENE_H_

还有.cpp文件:

#include "mainScene.h"
#include "cocos2d.h"
#include "SimpleAudioEngine.h"

using namespace cocos2d;
using namespace CocosDenshion;

mainScene::mainScene(){
}

mainScene::~mainScene(){
}

CCScene* mainScene::scene(){
    // 'Scene' is an autorelease object
    CCScene *scene = new CCScene();

    // Add layer as a child to scene
    CCLayer* layer = new mainScene();
    scene->addChild(layer);
    layer->release();

    return scene;
}



Best Answer-推荐答案


原因是您在第一个场景创建完成之前就替换了场景。尝试在 onEnter() 或 onTransitionDidfFinished() 中调用替换函数

关于ios - Cocos2d-x replaceScene 导致app崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333459/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap