SpriteKit中用于敌人的人工智能

5

我一直在用SpriteKit制作游戏。现在我已经添加了敌人,想知道如何使用AI控制他们在地图中移动(就像其他游戏一样)。

我希望敌人能够在TMX地图上四处走动,根据随机数来转弯。我尝试过这样做,但遇到了很多问题。有没有人知道哪些文章可以帮助我解决这个问题?我已经进行了一些研究。"PathFinding"和"A*"都出现了,但没有解释或示例代码告诉我如何实现它。非常感谢任何帮助。

2个回答

5
欢迎来到SO。首先我想说,我目前也在寻找完全相同的东西。不幸的是,至少到目前为止,我发现的东西很少。
我确实发现了一些非常有趣的内容:
  1. 一篇关于PacMan的ghosts behavior文章。简单而有效。

  2. Amit's Game Programming Information。一个更普遍的讨论关于制作游戏。

  3. Gamasutra。所有游戏设计方面都非常优秀的资源。

  4. Designing AI Algorithms For Turn-Based Strategy Games。Gamasutra的一篇文章,非常有用地用简单的英语解释了回合制AI。

这些资源各具特色,能够启发思考。然而,我还没有找到任何简单明了的解释坏人逻辑的文章(PacMan的文章已���接近了)。在亚马逊上搜索游戏AI的书籍只有一堆非常昂贵的书,读起来就像高级量子理论。
最终,我决定采用简单的方法开发我的游戏。我的坏人在两种可能的状态之间进行决策:巡逻模式和攻击模式。
在巡逻模式下,他会闲置几秒钟,向左或向右行走直到碰到墙壁或其他物体,跑步(与行走同样的规则),爬上和下梯子,偶尔跳跃。当他完成当前动作时,我使用arc4random()来决定他接下来做什么。这提供了真正的随机行为,并使坏人变得完全不可预测。
当玩家与坏人相距X距离时,攻击模式就会开始。坏人现在有一组不同的动作可以选择。向玩家奔跑、朝玩家挥剑、跳跃等等。同样地,我使用随机函数使坏人变得不可预测。到目前为止,结果非常出色。我的坏人表现得就像那些很难打败的12岁孩子在玩《光环》。
坏人将继续战斗,直到他死亡、玩家死亡或者玩家逃跑并不再处于需要攻击模式的X距离内。当然,你可以通过限制跳跃、攻击间隔等来微调坏人的行为。
希望这能够帮到您,激发您的创造力。

2
这里是A*搜索算法的维基百科页面,其中包含一个伪代码示例。你只需要理解算法的工作原理,就能够实现它。在Google上搜索iOS和A*会出现几个教程。
如果你有一个瓦片地图,那么不使用A*也可以相对容易地完成你想要的操作,像这样的伪代码。请注意保留HTML标签。
// 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*的作用所在,通过确定一条穿过世界的路径来找到目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接