级别 - Cocos2d

3
我有10个关卡。就像普通游戏一样,除非你打败前一关,否则你不能玩下一关。每个关卡中唯一变化的部分是一个角色和该角色的位置。
如何使得如果你通过了关卡,下一个关卡将被解锁,并区分你在哪个关卡上并加载已定义的“详细信息”(即角色文件和位置)?
非常感谢任何帮助!谢谢!
编辑:
我使用plist来加载所有关于关卡的信息
首先,我创建了一个PLIST(右键单击组,然后单击资源,“属性列表”)。然后,在PLIST中定义了所有信息。
接下来,我设置了一个全局变量来设置关卡号码。当用户选择任意一个关卡(它是CCMenu)时,该方法更改int“level”为正确的关卡号码(例如1,2,3,4,5)。然后,在我的游戏init中检查int“levels”,并从PLIST运行关卡。
这是游戏场景init运行关卡检查后运行的我的关卡方法。它加载PLIST,设置字典,选择背景,将其添加到层中,然后int“_ballX,_ballY”在.h文件中声明,该文件设置了球的位置值位于init中!
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Levels.plist"];
NSDictionary *plistDataAll = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];
NSDictionary *levelData = [NSDictionary dictionaryWithDictionary:[plistDataAll valueForKey:@"LevelOne"]];

NSString *background = [levelData objectForKey:@"LevelBackground"];

_m = [CCSprite spriteWithFile:background];
_m.anchorPoint = ccp(0, 0);
_m.position = ccp(0, 0);

[self addChild:_m];

_ballX = [[levelData valueForKey:@"BallPositionX"] intValue];
_ballY = [[levelData valueForKey:@"BallPositionY"] intValue];

希望这能帮助到某些人!感谢每个人的快速回复!
2个回答

3
我处理这个问题的方式基本上是创建一个抽象类,并在每个级别的单独类中实现该抽象类,然后每当该级别完成时,只需加载下一个类(级别)。

2
或者,您可以创建一个包含所有信息的.plist文件,并让您的场景从plist获取数据。 - Dream Lane
1
@Dream Lane,我不知道怎么做......我会开始查找。 @OscarMk,如果我找不到其他方法,那将是我的唯一选择。 - Jonathan
1
PLIST绝对是我推荐的方式。它非常容易使用。您只需将其用作字典...或者如果喜欢,可以将其用作字典的字典。 - Aaron Goselin
@Dream Lane 你怎么创建一个plist文件? - Rory Harvey
1
一个plist文件只是一个带有特定标签的文本文件,用于组织数据。个人而言,我会推荐使用XML,因为它是一种更广泛使用的格式,但实际上它们都是一样的,所以并不重要。 - jhocking
显示剩余2条评论

2
让您的级别类从某个数据文件(plist文件、xml或其他)加载级别数据。然后,每当您想要加载不同的级别时,只需指向不同的数据文件即可。
至于解锁级别,只需创建一个级别数组,其中包含级别及其已锁定/已解锁状态,级别选择类使用该数组来显示不同的级别。在游戏之间,该信息可以存储在另一个数据文件中(再次使用plist文件、xml甚至使用CoreData)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接