使用GKAgents从左到右移动精灵

时间:2015-12-23 23:53:41

标签: sprite-kit swift2 contact skphysicsbody gameplay-kit

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

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 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不仅会影响与左墙或右墙接触的代理,它会影响所有代理。结果是所有代理人都在屏幕上振荡,响应最靠近两面墙的代理人的物理接触。任何想法如何解决这个问题?在将目标发送给代理之前,我是否应该先尝试将目标传递给实体?

1 个答案:

答案 0 :(得分:0)

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