在这个游戏中,我有3个防御塔(数量可配置),每30秒以30km / h的速度发射一次“子弹”。这些防御塔有一个雷达,它们只在玩家处于塔台雷达下时开始射击。这不是问题。
我的问题是如何存储枪支火灾的数据。我不确定每颗子弹究竟需要什么样的数据,但我想到的一点就是子弹的位置。我们假设我现在只需要存储它(我已经为3D点定义了一个结构)。
我是否应该尝试弄清楚游戏在特定点可以拥有的最大子弹并声明具有该大小的阵列?我应该使用链表吗?或者别的什么?
我真的不知道该怎么做。我不需要任何花哨或复杂的东西。一些基本的东西,它很容易使用和实现是绰绰有余的。
P.S:我没有在游戏开发网站上发布这个问题(尽管有标签),因为我觉得它在这里更合适。答案 0 :(得分:3)
通常,固定长度数组不是一个好主意。
鉴于您的游戏模型,我不会选择任何不允许删除O(1)的数据结构。无论如何,这排除了普通数组,并可能建议一个链表。但是,应使用具有正确属性的通用容器类来抽象出底层细节。
至于你应该存储什么:
编辑 对于稍微复杂的问题,STL类总是会获取放入其中的元素的副本,因此在实践中,如果任何属性可能会在对象的生命周期内发生变化,那么您需要在堆上分配你的结构并在集合中存储(智能?)指针。
答案 1 :(得分:2)
我可能会使用std::vector
或std::list
。无论什么都是最简单的。
警告:如果你正在为一个非常有限的平台(慢速CPU,小内存)编码,那么使用一个普通的固定大小的C数组可能是有意义的。但这些日子不太可能。从最简单的代码开始,稍后更改它,当且仅当事实证明你无法负担抽象时。
答案 2 :(得分:1)
我想你可以从std::vector<BulletInfo>
开始,看看它是如何运作的。它提供类似接口的数组,但是可以动态调整大小。
答案 3 :(得分:1)
在这种情况下,我更喜欢使用稍微复杂的方法来管理项目符号。由于屏幕上可能的子弹数量与塔的数量直接相关,因此我会在每个塔类中保留一小段固定长度的子弹。每当塔发射子弹时,它会搜索其阵列,找到未使用的子弹,用新的位置/速度设置子弹并将其标记为活动状态。
稍微复杂的部分是我想在外部经理中保留第二个项目符号列表,比如BulletManager。当每个塔都被创建时,塔将其所有子弹添加到中央管理器。然后中央经理可以负责更新子弹。
我喜欢这种方法,因为它很容易让我管理与项目符号相关的内存约束,只需调整“活动塔数”,并为你创建所有项目符号。您不需要动态分配项目符号,因为它们都是合并的,并且您没有一个中央池,您经常需要在添加/删除塔时更改其大小。
它确实涉及轻微的移动开销,因为有一个带有指针列表的中央管理器。而且你需要小心,始终从中央经理那里从被毁坏的塔中移除任何子弹。但对我来说,这样做的好处是值得的。