(已搞定)被官方例子simpleGame搞死了,2.0.3,场景切换

  • 本帖最后由 walkman20 于 2013-1-3 21:57 编辑 *

新手伤不起,

没想到cocos2d-x 不同版本之间差异这么大。作者在cocos2d-1.0.1-x-0.9.1上运行而我在2.0.3基础 之上。

比如遍历数组的方法,2.0 就改变了,更接近于for(i=0;i<xxx;i++)的结构,这些差异我自己都搞定了,搞不定的是场景切换。

http://cocos2d.cocoachina.com/resource/show?nid=76
在官方例子7中,打怪超过30之后,切换到另一场景,并改变该场景的Label为“You Win”。

class GameOverLayer : public cocos2d::CCLayerColor
{
public:
GameOverLayer():_label(NULL) {};
virtual ~GameOverLayer();
bool init();
LAYER_NODE_FUNC(GameOverLayer);

 void gameOverDone();

 CC_SYNTHESIZE_READONLY(cocos2d::CCLabelTTF*, _label, Label);

};

首先这里就通不过了,2.0 貌似没有这个函数了,用CREATE_FUN?
修改:改为CREATE_FUNC(GameOverLayer);//2.0版本改此方法

class GameOverScene : public cocos2d::CCScene
{
public:
GameOverScene():_layer(NULL) {};
~GameOverScene();
bool init();
SCENE_NODE_FUNC(GameOverScene);

 CC_SYNTHESIZE_READONLY(GameOverLayer*, _layer, Layer);

};

这里提示不能隐式指定int型,难道要手动在前面加(int)?

修改:改为:CREATE_FUNC(GameOverScene);

bool GameOverScene::init()
{
if( CCScene::init() )
{
this->_layer = GameOverLayer::node();
this->_layer->retain();
this->addChild(_layer);
return true;
}
else
{
return false;
}
}

这里提示,不能直接使用基类的方法,要强制dynamic_cast或static_cast

但最让我崩溃的还是场景切换:

if (_projectilesDestroyed > 30)
{
GameOverScene *gameOverScene = GameOverScene::node();
gameOverScene->getLayer()->getLabel()->setString(“You Win!”);
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}

也是提示出错。
各位有没有啥关于场景切换(不要场景切换效果,网上搜的都是这个)的教程。

修改:改为GameOverScene * gameOverScene = GameOverScene::create();

比如,有几种场景切换的类型,分别如何切换。场景中单层,场景中多个层(layer),场景之间传递参数(或者是修改被调用场景的script或者Label的值。

已经搞定