Objective c 为NPC'使用路径查找,如A*;标准普尔;无瓦片字符

Objective c 为NPC'使用路径查找,如A*;标准普尔;无瓦片字符,objective-c,ios7,sprite-kit,path-finding,Objective C,Ios7,Sprite Kit,Path Finding,我一直在读一本名为《iOS游戏教程》的书(推荐给任何对iPhone游戏感兴趣的人)&我正在学习如何使用俯视的精灵套件制作平铺地图(如塞尔达·林克的觉醒传奇)。到目前为止,我已经用32x32的瓷砖制作了一张平铺地图,将玩家角色和几个NPC放置在世界上。甚至让NPC在地图上随机移动,尽管书中教导的方法是让他们从一个地砖移动到另一个地砖(任何时候围绕NPC的8个地砖中的任何一个——如果一个地砖具有某些属性,例如categoryBitMask,那么它将不会移动到该地砖) 我将把NPC运动改为基于物理的(

我一直在读一本名为《iOS游戏教程》的书(推荐给任何对iPhone游戏感兴趣的人)&我正在学习如何使用俯视的精灵套件制作平铺地图(如塞尔达·林克的觉醒传奇)。到目前为止,我已经用32x32的瓷砖制作了一张平铺地图,将玩家角色和几个NPC放置在世界上。甚至让NPC在地图上随机移动,尽管书中教导的方法是让他们从一个地砖移动到另一个地砖(任何时候围绕NPC的8个地砖中的任何一个——如果一个地砖具有某些属性,例如categoryBitMask,那么它将不会移动到该地砖)

我将把NPC运动改为基于物理的(这是它自己的问题),就像玩家角色现在所做的那样(这意味着NPC将与具有物理体的对象碰撞,就像玩家角色所做的那样)。它更具流动性和动态性

但问题就从这里开始。我想在NPC和玩家角色移动中实现寻路(如A*算法),因为地图包含建筑物、水、树木等,它们有自己的物理实体。限制NPC的随机移动或强迫他们走一条预定的路径(这将扼杀游戏的重点)是一回事,但另一件事是必须经常点击屏幕,让玩家角色避开他必须经过的所有建筑物/树木。我不想使用网格系统。有可能在x,y坐标系中实现一些寻路算法吗?这是资源密集型的吗?你能谈谈你的想法吗


谢谢。

这是一个非常有趣的话题

有在连续空间中寻找路径的算法。例如,您可以使用基于潜力的方法,目标的潜力非常低,障碍物为“山丘”(可能无限高,尽管这需要小心)。潜在方法的缺点是,您必须采取特殊的预防措施,防止它们陷入局部最小值。像这样的情况

        P
 +----+
 |   M|
 |    |
 + ---+
当M是试图接近玩家的怪物时,p可能出现。在本例中,怪物处于局部最小值,它必须达到更高的电位才能从建筑左下角的门出去。潜在算法的一个变体(事实上,将其简化为一个通常很有用)是将反重力分配给障碍物,将重力分配给目标。这也有点不确定,需要采取特殊预防措施以避免“卡住”

正如所指出的,SpriteKit提供了一个类,可以帮助您实现一个基于潜力的解决方案

其他方法包括“墙跟随”(例如),对于在迷宫般的环境中找到自己的方向非常有用

连续方法的一个缺点是NPC的移动通常看起来有点不自然——例如,即使上面例子中的怪物能够确定它处于局部最小值,并提高其搜索的“温度”(即,针对潜在梯度进行较大的移动,可能是随机的),它会弹来弹去,而不是径直向门走去

在连续空间中搜索的另一种方法是量化空间。一个简单的方法是平铺它,用多边形覆盖它,或者将它表示为一个多边形。本质上,您需要一种将连续空间中的每个点映射到表示量化空间的图上的顶点的方法。在这一点上,像A*和friends这样的图搜索算法是适用的

图形搜索在某种程度上是资源密集型的,但对于2d zelda类游戏来说,它应该可以在移动设备上进行,尤其是在各种优化的情况下,比如只“唤醒”距离玩家一定距离内的NPC(想想aggro)

在实现细节上有点单薄,但它会给你谷歌的正确条款


像往常一样,从简单开始并迭代。平铺非常简单,可以让您在优化之前体验图形搜索方法。

非常全面的概述,比我快。:)请注意,如果您使用潜在算法,您可以通过使用SpriteKit的类获得一些实现它的帮助。@rickster谢谢:-)如果您看到任何缺少或不正确的内容,请随意编辑它。感谢您提供的丰富信息。我现在可以停止跛行,开始以更好的姿势行走,以探索如何做到这一点。