GKAgent
画面を左から右に移動する方法を探しています。エージェントは に接続され、GKEntity
さらに「leftWall」と「rightWall」という 2 つのエージェントを作成しました。各エージェントには、一意の名前を持つ一致するスプライト ノードがあります。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
のエージェントを検索し、これを「seek」に渡します。これは基本的に機能しますが、多数のエージェントを設定する場合、新しいものを渡すと、左または右の壁と接触したエージェントに影響するだけでなく、すべてのエージェントに影響します。その結果、2 つの壁に最も近いエージェントからの物理的な接触に応答して、すべてのエージェントが画面内で振動しています。これを解決する方法はありますか?エージェントに送信する前に、最初にターゲットをエンティティに渡す必要がありますか?targetWallEntityName
GKGoal
targetWallEntityName