我试图找出在Xcode中使用Spritebuilder和Cocos2D在场景之间传递关卡参数的最佳方法。
我使用下面的标准代码在场景之间转换。
[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];
非常感谢任何帮助。
答案 0 :(得分:2)
假设Gameplay.ccb
已将GameplayClass
指定为其自定义类,并且该类具有名为currentLevel
的属性,则可以访问该实例并按如下方式分配级别: / p>
CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
game.currentLevel = 3;
[[CCDirector sharedDirector] replaceScene:theScene];
请注意,在分配currentLevel
时,GameplayClass
已经运行了init
和didLoadFromCCB
方法,因为这种情况发生在loadAsScene
期间。如果您需要在onEnter
中覆盖GameplayClass
进一步初始化处理:
-(void) onEnter
{
[super onEnter]; // must call super
switch (self.currentLevel)
{
// other switches omitted...
case 3:
// your level 3 code here
break;
}
}
答案 1 :(得分:0)
在我的游戏中(用Cocos2d 2.0 + CocosBuilder制作)我在类GameObjectLayer中添加了一个类方法loadWithLevelID:levelID
来管理游戏元素:
@implementation GameObjectLayer {
G1LevelID * _levelID;
}
// load a Luminetic Land game object layer
+ (instancetype)loadWithLevelID:(G1LevelID*)levelID {
NSString * levelFileName = ... builds levelFileName from levelID;
GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
[gol setLevelID:levelID];
return gol;
}
- (void)setLevelID:(G1LevelID*)levelID {
_levelID = levelID;
}
所以现在我可以创建一个GameObjectLayer输入
GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
通常,在映射ccbi文件的类中添加“load”方法可以带来以下好处:
我认为您可以使用与CCScene子类类似的方法。