使用 GKAgents 从左到右再向后移动精灵

using GKAgents to move sprites from left to right and back

我正在寻找一种在屏幕上从左向右移动 GKAgent 的方法。该代理已连接到 GKEntity,我还创建了两个代理,分别称为 "leftWall" 和 "rightWall"。对于每个代理,都有一个具有唯一名称的匹配精灵节点。我尝试在我的主 GameScene 中使用 SKPhysicsContact 将新的目标代理(例如,如果它与左节点联系,则传递右节点的名称)传递给在屏幕上移动的代理。

func didBeginContact(contact: SKPhysicsContact) {
        let nodeA = contact.bodyA.node
        let nodeB = contact.bodyB.node

        if nodeA!.name == "leftWall" {
            entityManager.contactWithWall("rightWall", nodeName: (nodeB?.name)!)
        }

为了找到移动代理,我有一个 class 中间有一个实体数组。

class EntityManager {
    var entities = Set<GKEntity>()
.
.
.
func contactWithWall (newWallName: String, nodeName: String) {
        for entity in entities {
            if let spriteComponent = entity.componentForClass(SpriteComponent.self) {
                if spriteComponent.node.name == nodeName 
                    entity.targetWallEntityName = newWallName
                }
            }
        }
    }

}

从移动 GKAgent 开始,我查找对应于 targetWallEntityName 的墙的代理(这是一个字符串变量)并将其传递给 'seek GKGoal.' 这基本上可以工作除了当我设置多个代理时,传递一个新的 targetWallEntityName 不只是影响与左墙或右墙接触的代理,它会影响所有代理。结果是所有代理都在屏幕中振荡,以响应距离两堵墙最近的代理的物理接触。任何想法如何解决这个问题?在将目标发送给它的代理之前,我应该先尝试将目标传递给实体吗?

谢谢0x141E。我已经将问题追溯到一个 spriteNode 的缩放比例与其对应的 physicsBody 之间的差异。使用 SKPhysics 触发新代理进行搜索工作正常。但出于某种原因,当一个节点过于频繁地触发碰撞时(因为在这种情况下它的大小为 body),游戏中的所有代理似乎都从这个代理接管了搜索目标,并且游戏进入混乱状态。