菜鸟教程小白 发表于 2022-12-13 16:12:15

ios - Cocos2d-x replaceScene 导致app崩溃


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

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

<pre><code>//Create a scene. it&#39;s an autorelease object
CCScene *pScene = landingScene::scene();
// Run intro scene
pDirector-&gt;runWithScene(pScene);
</code></pre>

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

<pre><code>CCDirector::sharedDirector()-&gt;replaceScene(mainScene::scene());
</code></pre>

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

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

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

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

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

<pre><code>#ifndef __LANDING_SCENE_H__
#define __LANDING_SCENE_H__

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

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

<p>还有.cpp文件:</p>

<pre><code>#include &#34;landingScene.h&#34;
#include &#34;SimpleAudioEngine.h&#34;
#include &#34;mainScene.h&#34;
#include &#34;introScene.h&#34;

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(){
    // &#39;scene&#39; is an autorelease object
    CCScene *scene = CCScene::create();

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

    return scene;
}

void landingScene::loadGame(){
    CCDirector::sharedDirector()-&gt;replaceScene(mainScene::scene());
}
</code></pre>

<p>这是我试图展示的主要场景的内容:</p>

<pre><code>#ifndef _MAIN_SCENE_H_
#define _MAIN_SCENE_H_

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

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

<p>还有.cpp文件:</p>

<pre><code>#include &#34;mainScene.h&#34;
#include &#34;cocos2d.h&#34;
#include &#34;SimpleAudioEngine.h&#34;

using namespace cocos2d;
using namespace CocosDenshion;

mainScene::mainScene(){
}

mainScene::~mainScene(){
}

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

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

    return scene;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>原因是您在第一个场景创建完成之前就替换了场景。尝试在 onEnter() 或 onTransitionDidfFinished() 中调用替换函数</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Cocos2d-x replaceScene 导致app崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12333459/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12333459/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Cocos2d-x replaceScene 导致app崩溃