Hey guys, I’m porting my iOS game from cocos2d-iphone to cocos2d-x.
I’ve hit a problem and been stuck there for the second day in a row, I’m trying to have a landing scene that loads either an intro scene or the main menu (depending on the user prefs)
the problem occurs once i try to:
CCdirector::sharedDirector()->replaceScene(introScene::scene());
The app immediately asserts and gives this error:
Assertion failed: (index<=arr->num), function ccArrayInsertObjectAtIndex, file xxx/libs/cocos2dx/support/data_support/ccCArray.cpp, line 153.
This is cocos2d-x 2.0.2
In AppDelegate.cpp I call the landing Scene like this:
pDirector->runWithScene(landingScene::scene());
The contens ot the LandingScene class is:
.h file:
#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"
USING_NS_CC ;
class landingScene : public cocos2d::CCLayer {
public:
void loadGame();
void loadIntro();
virtual bool init();
static cocos2d::CCScene* scene();
CREATE_FUNC(landingScene);
private:
GameState *sharedGameState;
};
#endif // __LANDING_SCENE_H__
and .CPP:
#include "landingScene.h"
#include "SimpleAudioEngine.h"
//#include "mainScene.h"
#include "introScene.h"
using namespace cocos2d;
using namespace CocosDenshion;
USING_NS_CC;
CCScene* landingScene::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// add layer as a child to scene
landingScene *layer = landingScene::create();
scene->addChild(layer);
return scene;
}
bool landingScene::init()
{
if ( !CCLayer::init() )
{
return false;
}
sharedGameState = GameState::sharedInstance();
CCSize s = CCDirector::sharedDirector()->getWinSize();
CCSprite *fadeSplash;
fadeSplash = CCSprite::create("Default.png");
addChild(fadeSplash);
fadeSplash->setPosition(ccp(s.width/2, s.height/2));
fadeSplash->runAction(CCFadeOut::create(1.0));
//Load intro
landingScene::loadIntro();
return true;
}
void landingScene::loadIntro(){
CCDirector::sharedDirector()->replaceScene(introScene::create());
}
The contents of the introScene is exactly the same, but i have a different sprite in it, that’s all !
can you guys help me out where my error is ? each scene works ok alone when tested, the error only pops up
when i try replacing any scene with the other …
can you show me a little example on how to replace scenes ?? cause in the cocos2d-x hello world code it doesn’t replace scenes the same way I do, it
creates layers instead of scenes and then calls replaceScene, i’m not sure how that works !?
any help ?