gpt4 book ai didi

c# - 防止实体在头顶射击游戏中相互堆叠

转载 作者:太空狗 更新时间:2023-10-30 00:27:15 24 4
gpt4 key购买 nike

我正在开发一个头顶射手,随着时间的推移,当我在竞技场周围转圈时,敌人将开始堆叠在一起,直到它们成为一大堆单位。它最终看起来很傻。

AI 非常简单和基本:找到玩家,向他移动,如果他在范围内则攻击他。

将它们彼此推开以免它们都出现在同一位置的最佳方法是什么?我认为植绒有点矫枉过正(而且可能过于密集,因为我一次会在屏幕上显示 100-200 个敌人)。

想法?

谢谢!

最佳答案

您可以采用以下几种不同的方法来解决此问题:

  1. 您可以为每个单位定义一个势场,将“高度”或“坏度”与 map 上的每个位置相关联。每个单元都以一种试图最小化其潜力的方式移动,也许通过朝着将其移动到一步中所能达到的最低潜力的方向迈出一步。您可以定义潜在函数,使其向玩家倾斜,使所有单位都尝试移动到玩家身边,但也可以在现有单位周围非常高,从而避免单位相互碰撞。这是一个非常强大的框架,一直在 AI 中被利用;一个著名的例子是它在 Berkeley Overmind 中的使用星际争霸的 AI,最终赢得了 AI 星际争霸比赛。如果你确实采用了这种方法,那么你可能会调整潜在的功能,让 AI 以许多其他有趣的方式运行,并且可以轻松地支持集群。我个人认为这是最好的方法,因为它最灵活。它也将是更高级的寻路模型的一个很好的起点。有关 AI 潜在领域的非常好实用介绍,请查看 this website .如需对势场及其应用进行严格的数学介绍,您可能需要查看 this paper使用势场调查不同的 AI 方法。

  2. 如果您为每个敌人定义一个边界圆,您可以通过防止任何两个单位彼此位于两个半径的距离内来明确禁止这些单位相互堆叠。任何时候两个单位距离太近,您都可以阻止其中一个移动,或者可以让它们相互施加力以将它们分开。当两个单元相互碰撞时,您可以选择一个随机的力矢量来应用于每个单元,以尝试将它们分开。与潜在字段相比,这是一个更复杂、更不优雅的解决方案,但如果您需要启动并运行某些东西,它绝对是一个可行的选择。

  3. 您可以在玩家周围选择一组单位尝试移动的点,然后让每个单位随机选择其中一个目标点移动到。这会导致单位更薄地散布在玩家周围的环形(或任何你喜欢的形状)中,避免你目前看到的巨大质量。同样,这不如使用势场优雅,但如果您的目标是让某些东西快速运行,这是您可以尝试的另一种快速技巧。

希望这对您有所帮助!

关于c# - 防止实体在头顶射击游戏中相互堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265067/

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