gpt4 book ai didi

java - 如何按顺序保留路径中的单元列表?

转载 作者:行者123 更新时间:2023-11-30 05:03:20 24 4
gpt4 key购买 nike

我正在开发一款塔防游戏,我希望防御炮塔能够向其射程内沿路径最远的攻击单位射击。我用 java 对其进行编程,并使用 ArrayLists 来保存单位。

到目前为止,我已将路径分成不同的 block ,每个 block 中都有一个单元列表。当一个单元离开该 block 时,它会被传递到路径上的下一个 block 。如果所有单位都以相同的速度移动,那么很容易跟踪哪个单位最远,因为它将是列表中的第一个。但我希望这些单位能够以不同的速度移动。

当一个单元被添加到一个 block 时,它会被添加到数组列表的末尾。因此,较早添加的单元位于列表的前面,最近添加的单元位于列表的末尾。

我最初的想法是让每个单元检查数组列表中低于它的单元,看看它们是否沿着路径更远。如果是,它会将数组列表向下移动到正确的位置。这似乎需要 block 做很多额外的工作,而且我担心它会大大减慢游戏速度。

这是个好主意还是我应该尝试其他方法?如果有帮助的话我可以发布一些代码。

最佳答案

我不确定 ArrayList 是否是您的最佳选择。我假设在游戏中的每个“滴答声”中,每个单位都会移动指定的距离,这意味着你会遇到碰撞单位,将彼此移入或移出列表中的位置。

我还假设每个“ block ”都比 1 深。这意味着对于每个“刻度”,给定的单元可以在 block 内比另一个单元移动得更远,并且如果一个单元已到达一个单元的末尾 block ,下一个刻度会将其撞入下一个 block 。

选项 1(平庸):

使用 Map<Integer, Set<Enemy>>整数来自 0 - BLOCK_DEPTH每个人都会看到敌人从一组跳到另一组。这里没有排序;只是指针重新分配。您还只需执行 map.get(0)并将其添加到 nextMap.get(BLOCK_DEPTH)

选项 2(更好?):

使用 SortedSet实现基于 Enemy.position 的比较器,其中position是来自 0 - BLOCK_DEPTH 的整数。每个 Enemy 都有一个监听器,用于更新其在刻度上的位置,然后在 Enemy.position 为 0 时,通过从 Set 中弹出元素来启动每个刻度,将它们插入下一个集合。

关于java - 如何按顺序保留路径中的单元列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com