Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何使一个SKSpriteNode避免另一个SKSpriteNode?_Swift_Xcode_Sprite Kit_Game Physics - Fatal编程技术网

Swift 如何使一个SKSpriteNode避免另一个SKSpriteNode?

Swift 如何使一个SKSpriteNode避免另一个SKSpriteNode?,swift,xcode,sprite-kit,game-physics,Swift,Xcode,Sprite Kit,Game Physics,我正在为我在Xcode中制作的SpriteKit游戏开发AI模式。我有可以发射到人工智能的动态物理体。我想这样做,当其中一个物体在AI的某个半径内时,AI会试图躲避它。我已经开始通过不同的途径工作,并取得了不错的结果 第一种方法(伪代码):检查AI.position.x和AI.position.y,并与incomingSprite.position.x和incomingSprite.position.y进行比较。如果x和y都在半径范围内,则将此比较分为四个象限。(即incomingSprite是

我正在为我在Xcode中制作的SpriteKit游戏开发AI模式。我有可以发射到人工智能的动态物理体。我想这样做,当其中一个物体在AI的某个半径内时,AI会试图躲避它。我已经开始通过不同的途径工作,并取得了不错的结果

第一种方法(伪代码):检查AI.position.x和AI.position.y,并与incomingSprite.position.x和incomingSprite.position.y进行比较。如果x和y都在半径范围内,则将此比较分为四个象限。(即incomingSprite是相对于AI的左下角、右下角等)。基于此信息,移动AI的位置以远离它

缺点: -更新函数中的大量代码和计算用于解释多个传入精灵 -根据传入精灵的dx和dy,AI经常做出不合逻辑的决定

第二种方法(伪代码):计算AI到InMingSprite的距离。然后检查InMingSprite的dx和dy,并将dx和dy设置为与InMingSprite相反的方向。这似乎合乎逻辑。我对这样做有点生疏了。我觉得这可能是个好主意

有没有更好的方法来实现这一点?也许磁铁上有一个力场,我可以用它以一定的强度排斥AI,这样如果incomingSprite足够快的话,它会覆盖并仍然碰撞?我很担心内存,因为大部分AI逻辑都在更新函数中,如果我不小心的话,这可能会导致大问题


编辑:我决定使用电场,给进来的精灵一个正电荷,让它们被AI排斥。这使事情变得准确/轻量级,并且更有趣。如果进入的精灵足够快,它们将突破电场,仍然与AI碰撞。这也为我的游戏提供了额外的难度参数(场地越强,进入的精灵越难与AI发生碰撞)。

请看GameplayKit-GKBehavior:)请看GameplayKit-GKBehavior:)