5

一段时间以来,我一直在用 sprite kit 制作游戏。我添加了敌人,想知道如何使用 AI 在地图周围控制它们(就像在任何其他游戏中一样)。

我想要的是让敌人在 TMX 地图周围疑惑,根据随机数转弯。我试图这样做,但遇到了很多问题。有谁知道任何可以帮助我的文章?我做了一些研究。“PathFinding”和“A*”出现了,但是有关于如何做的解释或示例代码。任何帮助将不胜感激。

4

2 回答 2

5

欢迎来到 SO。首先让我说我目前也在寻找完全相同的东西。不幸的是,选择有点弱,至少我到目前为止发现的。

我确实发现了一些非常有趣的读物:

  1. 一篇关于PacMan的幽灵行为的文章。简单但非常有效。

  2. Amit 的游戏编程信息。关于制作游戏的更一般性的讨论。

  3. 伽马苏特拉。用于所有游戏设计的优秀资源。

  4. 为回合制策略游戏设计 AI 算法。一篇 Gamasutra 文章,对于用简单的英语解释基于回合的 AI 非常有用。

所有这些都以自己的方式非常有用,并让您思考。然而,我所遇到的任何事情都没有提供对坏人逻辑的简单解释(PacMan 文章接近)。在亚马逊上搜索游戏 AI 书籍会产生一堆非常昂贵的书籍,而且读起来更像是高级量子理论。

我最终决定为我的游戏选择一种简单的方法。我让我的坏人在两种可能的状态之间做出决定。巡逻模式和攻击模式。

在巡逻模式下,他会闲置几秒钟,向左或向右走,直到撞到墙壁或其他物体,跑步(与行走相同),爬上爬下梯子,偶尔跳跃。当他当前的动作完成时,我arc4random()用来决定他下一步做什么。这提供了一种真正随机的行为,并使坏人完全不可预测。

攻击模式发生在玩家距离坏人 X 距离内时。坏人现在有一组不同的动作可供选择。跑向玩家,向玩家挥剑,跳起来,等等。我再次使用随机函数使坏人变得不可预测。到目前为止的结果非常好。我的坏人表现得像那些玩光环的 12 岁孩子一样难以击败。

坏人将继续战斗,直到他死、玩家死亡或玩家逃跑并且不再处于攻击模式所需的 X 距离内。你当然可以通过限制跳跃、攻击间隔等来微调坏人的行为。

希望这有助于并让您的创意源源不断。

于 2014-04-06T16:20:26.457 回答
2

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* 发挥作用的地方,确定了通过的方式世界找到通往目标的道路。

于 2014-04-06T16:04:32.747 回答