AI为SpriteKit中的敌人

时间:2014-04-06 15:46:19

标签: ios objective-c sprite-kit path-finding game-ai

我一直在精灵套装中制作游戏已有一段时间了。我添加了敌人,我想知道如何使用AI在地图上控制它们(就像在任何其他游戏中一样)。

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

2 个答案:

答案 0 :(得分: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。

  5. 所有这些都以他们自己的方式非常有用并让你思考。然而,我所遇到的任何事情都没有为一个坏人的逻辑提供一个简单的措辞(PacMan文章接近尾声)。在亚马逊上搜索游戏AI书籍会产生大量书籍,这些书籍非常昂贵并且更像是先进的量子理论。

    我最终为我的游戏决定了一个简单的方法。我有我的坏人决定两种可能的状态。巡逻模式和攻击模式。

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

    攻击模式发生在玩家距离坏人的X距离内时。坏人现在有一套不同的行动可供选择。奔向玩家,挥动玩家的剑,跳起来等等。我再次使用随机函数使坏人无法预测。到目前为止的结果非常好。我的坏人表现得像是一个难以击败12岁孩子玩Halo的人。

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

    希望这会有所帮助,让你的创意充满活力。

答案 1 :(得分:2)

A *搜索算法here的维基百科页面包含一个伪代码示例。您真正需要的是了解算法的工作原理,然后您应该能够实现它。谷歌搜索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 *发挥作用的地方,确定通过世界找到通往目标的路径的方法。