Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在游戏的多个阶段重用层_Objective C_Cocos2d Iphone - Fatal编程技术网

Objective c 在游戏的多个阶段重用层

Objective c 在游戏的多个阶段重用层,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,我正在尝试创建一个具有多个关卡(目前为10关卡)的游戏。我为每个级别创建了一个类,但是如果要添加更多级别,这将是非常非常乏味的。我的问题是,如何重用一个层/类来拥有所有级别的游戏?每个级别的唯一区别是目标数量和目标位置。除此之外,一切都差不多。创建一个名为LevelLayer的类,它从一个级别实现所有逻辑。现在,创建一个名为Level1Layer的新类,它实现了LevelLayer 现在逐步将特定于level1的代码从LevelLayer移动到Level1Layer,直到LevelLayer只包

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

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

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

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

通过迭代执行此操作,最终将得到一个基类(LevelLayer),该基类整合所有与泛型级别相关的代码,每个级别的特定代码被划分到对应于特定级别的类中

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

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


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

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

例如,您可以将游戏对象的二维数组传递到LevelMap的构造函数中,然后让LevelMap将这些游戏对象作为布局集成到自身中,其中数组中的[0,0]位置为左上角,[array.xLength-1,array.YLength-1]为地图的右下角。或者你决定的任何惯例。只要你选择你在概念上感到舒服的东西并始终如一地使用它,这真的没什么大不了的


使用XML也可以做同样的事情,方法是创建一个结构化文档,以相同的方式布局级别,告诉类将所有目标放在何处。

纠正我的错误,我需要做的是创建一个基类,其中所有类似项(如背景、计时器、舞台标签)都将位于其中。然后为每个关卡创建一个类,该类将包含专门针对它们的项目,如精灵位置和动画?这将是正常的方法,是的。级别层应仅包含区别于其他级别的代码和数据。它们都应该继承自包含对所有级别都有用的代码的类。感谢您的解释和回答。你知道我可以看一个很好的教程来展示这种实现吗?