在游戏中重复使用多个阶段的图层

时间:2013-02-01 05:09:07

标签: objective-c cocos2d-iphone

我正在尝试创建一个具有多个级别的游戏(目前为10个)。我为每个级别创建了一个类,但是如果要添加更多级别,这将非常非常繁琐。我的问题是,我如何重用一个图层/类来拥有游戏的所有级别?每个级别的唯一区别是目标的数量和目标的位置。除此之外,一切都差不多。

2 个答案:

答案 0 :(得分:1)

创建一个名为LevelLayer的类,它实现了其中一个级别的所有逻辑。现在,创建一个名为Level1Layer的新类,它实现了LevelLayer。

现在逐步将特定于level1的代码从LevelLayer移动到Level1Layer,直到LevelLayer只包含对所有级别都有用的代码。

现在创建一个继承自LevelLayer的Level2Layer。请注意,此级别的大部分代码已经完成,可以通过基类(LevelLayer)上的方法调用。

通过迭代执行此操作,您最终会得到一个基类(LevelLayer),它将所有代码合并为一个通用级别,每个级别的特定代码都在与特定级别对应的类中进行处理。

请注意,过了一段时间,你应该已经达到了level1和level2所需的代码在LevelLayer中,而 level1需要的代码和数据在Level1Layer中并编码只有 level2需求在Level2Layer中。

一段时间后,您可能会发现所有级别仅由特定数据项(例如包含该映射的int数组)不同。在这种情况下,您可能希望创建一个类,该类通过构造函数获取此数据项(或将其从文件中反序列化,其路径提供给构造函数),该类实现LevelLayer。

此时,您可以将大部分时间用于编辑数据文件(“级别”文件)而不是代码。

答案 1 :(得分:1)

我不知道cocos2d是什么,但通常在这种情况下你想要创建一个名为LevelMap的通用类,然后使该类可配置。对于游戏中的每个级别,您创建了该类的新实例,然后在代码中对其进行配置,或者让类读取某种配置文件(XML会想到),该文件定义了级别应该是什么看起来像。

例如,您可以将GameObjects的二维数组传递到LevelMap的构造函数中,然后让LevelMap将这些GameObjects集成到自身中,作为布局,数组中的[0,0]位置为上层left,[array.xLength - 1,array.YLength - 1]是地图的右下角。或者你所决定的任何惯例。只要你选择一个你在概念上很舒服并且能够始终如一地使用它的东西,那真的没那么重要。

您可以通过创建一个结构化文档来对XML做同样的事情,该文档以相同的方式布置关卡,告诉班级将所有目标放在哪里。