Iphone 游戏中武器的等级设计?

Iphone 游戏中武器的等级设计?,iphone,oop,class-design,Iphone,Oop,Class Design,我喜欢做游戏,现在第一次在移动设备上尝试自己。在那里,性能当然是一个比在一台漂亮的PC上更大的问题,我发现自己在武器(或者更确切地说是投射物)类设计上特别挣扎。 它们需要大量更新、大量销毁/创建,通常需要大量更新 现在我用一种显而易见的方式来做,我每次开火时都会制造一个抛射物,并在撞击时将其摧毁。每帧检查所有活动投射物是否与其他对象发生碰撞。 这两个步骤似乎都可能需要改进。关于如何有效处理此类对象,是否有常见的方法 总的来说,我正在寻找关于如何进行干净高效的课堂设计的建议,到目前为止,我在这方面

我喜欢做游戏,现在第一次在移动设备上尝试自己。在那里,性能当然是一个比在一台漂亮的PC上更大的问题,我发现自己在武器(或者更确切地说是投射物)类设计上特别挣扎。 它们需要大量更新、大量销毁/创建,通常需要大量更新

现在我用一种显而易见的方式来做,我每次开火时都会制造一个抛射物,并在撞击时将其摧毁。每帧检查所有活动投射物是否与其他对象发生碰撞。 这两个步骤似乎都可能需要改进。关于如何有效处理此类对象,是否有常见的方法

总的来说,我正在寻找关于如何进行干净高效的课堂设计的建议,到目前为止,我在这方面的谷歌搜索能力很弱


我很乐意接受关于这个主题的任何建议。

当您在短时间内创建和销毁了大量对象时,一种常见的方法是让已分配的实例池重新初始化。只有当池为空时,才能分配新实例。苹果通过MapKit和表视图等实现了这一点。研究这些接口可能会很好地为您服务。

我认为这与类设计无关。你的课很好;需要改进的是算法

它们需要大量更新、大量销毁/创建,通常需要大量更新

不要毁掉每一个弹丸,而是把它放进一个死弹头里。然后,当您需要创建一个新对象时,不要分配一个新对象,而是从死区列表中提取一个对象并重新初始化它。这通常会更快,因为您可以节省内存管理调用

至于更新,你需要更新所有改变的东西——真的没有办法

每帧检查所有活动投射物是否与其他对象发生碰撞

首先,如果你检查每一个对象,然后每一对对象进行两次比较。只需比较更新列表中稍后出现的对象,就可以避免一半的检查

#Bad
for obj1 in all_objects:
    for obj2 in all_objects:
        if obj1 hit obj2:
            resolve_collision

#Good
for obj1 in all_objects:
    for obj2 in all_objects_after_obj1:
        if obj1 hit obj2:
            resolve_collision
如何在对象1之后实现“所有对象”是特定于语言的,但是如果有一个数组或其他随机访问结构容纳对象,则可以从对象1之后开始索引

其次,命中检查本身可能很慢。确保您没有执行复杂的数学运算来检查碰撞,而使用更简单的选项即可。如果世界很大,空间数据库方案可以帮助减少检查潜在碰撞的对象数量,例如栅格地图或四叉树。但这通常是尴尬的,在一个小游戏中需要付出大量的努力,却收效甚微

这两个步骤似乎都需要改进


他们只是“看起来”?配置应用程序并查看慢速部分的位置。猜测性能很少是个好主意,因为现代语言和硬件可能会令人惊讶。

正如Jim所写,您可以创建一个对象池并对其进行管理。如果您正在寻找一种特定的设计模式,希望它能对您有所帮助。

一次只有一个投射物吗?