我正在寻找一种在屏幕上从左向右移动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
不仅会影响与左墙或右墙接触的代理,它会影响所有代理。结果是所有代理人都在屏幕上振荡,响应最靠近两面墙的代理人的物理接触。任何想法如何解决这个问题?在将目标发送给代理之前,我是否应该先尝试将目标传递给实体?
答案 0 :(得分:0)
谢谢0x141E
。我已将问题追溯到一个spriteNode
及其相应physicsBody
的缩放之间的差异。使用SKPhysics
触发新代理以寻求正常工作。但是出于某种原因,当一个节点过于频繁地触发碰撞时(因为在这种情况下它的身体大小),游戏中的所有代理似乎都接管了这个代理的搜索目标,并且游戏进入混乱状态。