【发布时间】:2019-01-17 09:30:05
【问题描述】:
在一本 c++ 书籍的帮助下,我编写的小游戏有问题。
首先我有一个名为 PlayerObject 的类,以及一个存储所有游戏对象的数组。 游戏开始时,我循环遍历数组中的所有对象。
while (true) {
for (auto i = 0; i < 100; i++) {
auto object = FuncObjectId(i);
if (PlayerObject.IsEnemy(object) &&
PlayerObject.Player.Position.Distance(object.Position) < 1000) {
// enemies found in range
FuncMoveTo(object)
}
}
}
但是如果给定范围内有多个敌人怎么办?我如何订购它们?
例如,按寿命或距离排序。 这样我的玩家就会移动到最近的目标,或最低的生命值目标。
此外,整个事情必须以某种方式重置。 玩家在杀死目标后不应该停下来, 他应该自动去下一个生命/最近位置最低的敌人。
【问题讨论】:
-
你可以看看
std::sort? -
还有可能
std::copy_if -
给猫剥皮的方法不止一种。例如,您可以将所有“有趣”的 object_id 复制到一个临时容器中,并按对象的健康状况对其进行排序。您必须对主循环的每次迭代进行排序,所以它不太有效。另一种方法是使用更有效的数据结构来存储对象,按距离和/或健康状况进行索引。
标签: c++ sorting game-engine