我正在构建一个拥有数十个动态生成的迷你级别的游戏。为了简化,假设我有三种类型的级别,A,B和C,每个级别都可以采用整数难度。 LevelA,LevelB和LevelC是CCLayer的子类,我一直将它们加载到一个GameScene中,它是CCScene的一个子类,一次一个。我没跟这种方法结婚;它正是在发挥作用。
我无法弄清楚如何以总体方式控制关卡的流动。
加载新关卡的简单方法似乎是复制[[CCDirector sharedDirector] replaceScene:[newScene node]]
模型 - 所以类似于:[[GameScene sharedScene] replaceGameplayLayer:[LevelA newLevelWithDifficulty:5]]]
。
这样可以正常工作,但前提是下一级别的调用是在当前级别的代码中。因此,如果我处于A级,每次达到10分时我都可以加载相应的B级 - 类似于:
-(void)checkScore {
if (score >= 10) {
[[GameScene sharedScene] replaceGameplayLayer:[LevelB newLevelWithDifficulty:currentLevelDifficulty]];
}
}
然后在LevelB类中执行相同操作以加载C级别或其他一些配置。
但是,如果我想计划一个级别订单怎么办? A1,B1,C1,C2,C3,C4,C5,A2等?我希望能够将每个级别视为函数中的同步线。像:
-(void)playGame {
[LevelA newLevelWithDifficulty:1];
[LevelB newLevelWithDifficulty:1];
for (int i = 0; i < 5; i++) {
[LevelC newLevelWithDifficulty:i];
}
// ...etc...
}
我不知道如何解决这个问题。它甚至可能吗?这很容易让checkScore方法在10点时杀死当前的等级,但是如何让LevelB在发生之前保持不变?
我希望这个问题有道理。您可以提供任何帮助。
答案 0 :(得分:0)
你可以在你的场景中以适当的顺序创建一个级别的数组......但是提前创建它们将是昂贵的(纹理等等)。因此,设计一个能够唯一识别水平和难度的关键系统。接下来,您的场景可以注册通知(在NSNotificationCenter和NSNotification上阅读),每个级别都可以通过发布通知来表示完成。您可以有多个通知,例如一个用于levelComplete,gameOver和gameVictory。
当场景获得levelComplete通知时,您可以淡出图层,查找下一级信息,实例化该类的实例,添加它并淡入其中。....
只是这样做的一种方式。其他可用。
我有级别描述符plists,包含类名,要播放的音乐,胜利和gamover条件等....并使用这样的方案来排序级别而不交换场景。适合我。 ymmv:)