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