0

我目前正在编写 roguelike 游戏,并在进行过程中自学我需要的东西。

我被困在一个问题上,我在这里找到了一些答案: 在游戏中组织实体的最佳方式?

我需要一个实体树,其中包含对该问题的最佳响应中描述的类。

它提到了通过 std::set 迭代来运行每个实体的“脚本”——但留下了一些我需要知道的东西无法解释。

  1. 在这样的实现中,我如何查找坐标(类中的整数)?我怀疑这比运行一个遍历所有内容直到找到匹配结果的 For 更容易......

  2. 我将如何处理同一地点的多个事物(项目堆栈等)?我知道我可以让一个类的多个实例包含相同的坐标,但是在这种情况下我会从查找中得到什么?

  3. 有没有办法迭代,例如,实体的“速度”统计的降序?

谢谢~

4

2 回答 2

0

您将通过指针操作实体,因此将单个实体放入多个容器中没有问题。所以对于 1) 矩阵 > 级别;(其中 Matrix 是您自己实现的简单二维数组),这也可以在给定位置处理多个元素。而 level[row][column] 将返回对 std::vector 的引用。(实际上,我可能会将 std::vector 包装在一个自定义类中,比如 EntityList,它有一个非常简单的界面。这让我的选择为未来保持开放。)

关于 3,最简单的解决方案是将列表复制到本地 EntityList 中,并根据您想要的任何标准对其进行排序。

于 2011-03-15T09:22:57.763 回答
0

如您所说,最好的方法是拥有一个“全局”实体数组(尽管请将它们封装在处理程序类中,否则您最终可能会想自杀:p)

有一个基本类型的实体,从中派生出各种东西,例如 crate 和敌人之类的东西,也许还有从专门针对不同类型的那些派生的不同类(例如 grue 和 bat 可能有单独的类?尽管如此,这可以变成很多不同的类最好的办法通常是每个对象都有参数(比如对于敌人,他们会有健康、伤害、速度等))。

将它们全部存储在同一个数组中,并具有一个虚拟更新函数,您每帧都调用它们,

于 2011-03-15T07:40:12.627 回答