一段时间以来,我一直在用 sprite kit 制作游戏。我添加了敌人,想知道如何使用 AI 在地图周围控制它们(就像在任何其他游戏中一样)。
我想要的是让敌人在 TMX 地图周围疑惑,根据随机数转弯。我试图这样做,但遇到了很多问题。有谁知道任何可以帮助我的文章?我做了一些研究。“PathFinding”和“A*”出现了,但是有关于如何做的解释或示例代码。任何帮助将不胜感激。
一段时间以来,我一直在用 sprite kit 制作游戏。我添加了敌人,想知道如何使用 AI 在地图周围控制它们(就像在任何其他游戏中一样)。
我想要的是让敌人在 TMX 地图周围疑惑,根据随机数转弯。我试图这样做,但遇到了很多问题。有谁知道任何可以帮助我的文章?我做了一些研究。“PathFinding”和“A*”出现了,但是有关于如何做的解释或示例代码。任何帮助将不胜感激。
欢迎来到 SO。首先让我说我目前也在寻找完全相同的东西。不幸的是,选择有点弱,至少我到目前为止发现的。
我确实发现了一些非常有趣的读物:
一篇关于PacMan的幽灵行为的文章。简单但非常有效。
Amit 的游戏编程信息。关于制作游戏的更一般性的讨论。
伽马苏特拉。用于所有游戏设计的优秀资源。
为回合制策略游戏设计 AI 算法。一篇 Gamasutra 文章,对于用简单的英语解释基于回合的 AI 非常有用。
所有这些都以自己的方式非常有用,并让您思考。然而,我所遇到的任何事情都没有提供对坏人逻辑的简单解释(PacMan 文章接近)。在亚马逊上搜索游戏 AI 书籍会产生一堆非常昂贵的书籍,而且读起来更像是高级量子理论。
我最终决定为我的游戏选择一种简单的方法。我让我的坏人在两种可能的状态之间做出决定。巡逻模式和攻击模式。
在巡逻模式下,他会闲置几秒钟,向左或向右走,直到撞到墙壁或其他物体,跑步(与行走相同),爬上爬下梯子,偶尔跳跃。当他当前的动作完成时,我arc4random()
用来决定他下一步做什么。这提供了一种真正随机的行为,并使坏人完全不可预测。
攻击模式发生在玩家距离坏人 X 距离内时。坏人现在有一组不同的动作可供选择。跑向玩家,向玩家挥剑,跳起来,等等。我再次使用随机函数使坏人变得不可预测。到目前为止的结果非常好。我的坏人表现得像那些玩光环的 12 岁孩子一样难以击败。
坏人将继续战斗,直到他死、玩家死亡或玩家逃跑并且不再处于攻击模式所需的 X 距离内。你当然可以通过限制跳跃、攻击间隔等来微调坏人的行为。
希望这有助于并让您的创意源源不断。
A* 搜索算法的维基百科页面包含一个伪代码示例。您真正需要的只是了解算法的工作原理,然后您应该能够实现它。谷歌搜索 iOS 和 A* 带来了几个教程。
你有一个平铺地图,所以在没有 A* 的情况下做你想做的事情应该相对容易,就像这段伪代码一样。
// An Update function for your Enemy
function Update
paths = GetAllPathways()
if paths.length == 0
TurnAround()
else
randomPath = paths.Random()
TurnTowards(randomPath)
endif
MoveForward()
end function
function GetAllPathways()
paths = new Array()
if CanGoForward()
paths.push(forward)
end if
if CanGoLeft()
paths.push(left)
end
if CanGoRight()
paths.push(right)
end
return paths
end function
像 A* 这样的算法确实适用于更复杂的事情(不是随机决策),您可以在其中拥有复杂或动态的地图,并希望您的敌人动态地瞄准某物或玩家,这正是 A* 发挥作用的地方,确定了通过的方式世界找到通往目标的道路。