0

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

4

2 回答 2

1

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

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

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

通过迭代地执行此操作,您最终会得到一个基类 (LevelLayer),它整合了与通用级别有关的所有代码,每个级别的特定代码被划分在与特定级别相对应的类中。

请注意,一段时间后,您应该已经达到这样一个点,即 level1 和 level2 都需要的代码在 LevelLayer 中,只有level1 需要的代码和数据在 Level1Layer 中,只有level2 需要的代码在 Level2Layer 中。

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

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

于 2013-02-01T05:14:01.883 回答
1

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

例如,您可以将 GameObjects 的二维数组传递给 LevelMap 的构造函数,然后让 LevelMap 将这些 GameObjects 集成到自身中作为布局,数组中的 [0,0] 位置位于左上角,[array.xLength - 1, array.YLength - 1] 是地图的右下角。或者你决定的任何约定。只要您选择在概念上熟悉的东西并始终如一地使用它,这真的没关系。

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

于 2013-02-01T05:15:24.283 回答