我正在制作游戏,但我遇到了很难实现代码。我的游戏是一个基于平铺的平台游戏,有很多敌人在追逐你。基本上,理论上,我希望我的敌人能够,每帧/秒/ 2秒,找到我的播放器的现实和最短路径。我最初认为A-star是一种解决方案,但它会将敌人引向无视重力的路径,这并不好。此外,多个敌人将每秒使用它来获取最新路径,然后走它的前几个区块。因此,他们将每秒丢弃剩余的路径,并且只关注它的前几个区块。我知道这似乎很多,如果他们不止一个敌人,每一秒计算一条新路径,同时计算一条新路径,但我不知道有什么其他方法可以实现我想要的。 这是我想要的图片: 说明:绿色数字是玩家,红色数字是敌人。灰色瓷砖是规则的,开放的,没有任何瓷砖,棕色瓷砖是你可以站立的瓷砖。最后突出显示的黄色瓷砖代表我希望我的敌人能够找到的路径,以便真实地找到玩家。 那么,问题是:我可以使用什么样的现实路径寻找算法来获取它?保持快速?
编辑* 我更新了图片以代表他们可能的最复杂的地图。这张地图代表我的游戏玩家实际看到的东西,他们只是使用WASD并且可以四处走动,他们看到自己在这个2d平台前视图中移动。他们将是不同类型的敌人,所有敌人都有不同的速度和跳跃高度。但是所有人都有足够的跳跃高度和速度来跳过这张地图,然后通过它进行操纵。通过简单地读取其中包含级别数据的XML文件来生成映射。然后解析数据,并根据XML所说的内容将不同类型的图块放置在存储精灵的图块中。 EX(XML节点:( type =“reg”graphic =“grass2”x =“5”y =“7”)因此x和y乘以常量gridSize(如30或其他)并将它们放下因此,敌人从附属于他们的AI类中得到他们的逐帧指令。这个类负责产生这条路径并将第一个方向返回给敌人,这应该只发生在每一秒左右,以便敌人不要走错路。如果你理解我的概念,请告诉我,你有一些想法/想法,甚至可能是我正在寻找的答案。 另外:这个游戏中的物理学与寻路是分开的,它们工作得很好,使用AABB和AABB概念(玩家和敌人也是AABB)。
答案 0 :(得分:1)
这里使用A *的技巧是如何将图块链接在一起以形成可用路径。以红色球员需要穿越的第一个差距为例。下一个平台(左边是棕色瓷砖)的“链接”实际上是一个跳跃动作,而不是移动动作。此外,由您决定节点如何连接在一起;当从一块棕色瓷砖上的灰色瓷砖移动到灰色瓷砖时,我会加入一个沉重的惩罚,下面没有任何东西只是为了初学者(没有阻止打开快捷方式的跳跃)。
我个人看到两条路线:快速预测玩家可以跳多远以及跳跃的位置,并调整算法如何确定节点邻接或接受路径并确定路径的某些部分“挂起”在空中(紧接在下面没有棕色的瓦片)并使敌人“跳跃”到下一部分的路径。诀窍是处理事情,当敌人可以通过棕色瓷砖,即使路径不是抛物线。
我不熟悉任何一种解决方案;只是我想过的东西。
答案 1 :(得分:0)
您需要向我们提供您要自动创建或手动创建的地图,玩家和敌人行为(包括跳跃和跨越速度)的最复杂案例,以便我们提供相关建议。给定的地图非常简单,将地图放在一个二维数组中,然后将初始玩家位置作为该地图的一个元素,然后首先测试同一行中的较低数字列是否被棕色占用,如果不是将玩家放在那里并且重复直到错误然后同一行更高的列等等移动敌人。
更新:从我对舞台一代的阅读 - 有时你创造 - 不是半随机的。
我的建议是敌人用相同的AI创建自己的克隆但是看不见,每个克隆开始向不同方向跳跃/左/右/向右/向左对角跳跃,每次成功它创建一个新的克隆 - 基本上遗传算法。从地图上看,似乎敌人永远不需要评估一条路径而不是另一条路径只是一种方式无法接近玩家的初始位置而其他方式则没有。