2

iOSゲームをCocos2dからCocos2d-xに移植しています。私はまだC++が得意ではないので、これを自分でデバッグすることはできませんでした。

私が持っているのは、2つのシーンの単純なシナリオです。1つは実行時にロードしてイントロを表示し、次に別のシーンをロードします。最初のイントロシーンは次のようにロードされます。

//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;
}
4

1 に答える 1

3

その理由は、最初のシーンの作成が完了する前にシーンを置き換えたためです。onEnter()またはonTransitionDidfFinished()で置換関数を呼び出してみてください

于 2012-09-10T00:53:29.010 に答える