1

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 つの壁に最も近いエージェントからの物理的な接触に応答して、すべてのエージェントが画面内で振動しています。これを解決する方法はありますか?エージェントに送信する前に、最初にターゲットをエンティティに渡す必要がありますか?targetWallEntityNameGKGoaltargetWallEntityName

4

1 に答える 1

0

ありがとう0x141E。1 のスケーリングspriteNodeとそれに対応するphysicsBody. SKPhysicsシークする新しいエージェントをトリガーするために使用すると、正常に機能します。ただし、何らかの理由で、1 つのノードが頻繁に衝突をトリガーすると (この場合はボディのサイズのため)、ゲーム内のすべてのエージェントがこの 1 つのエージェントからシーク ターゲットを引き継ぐように見え、ゲームはカオス状態になります。

于 2015-12-26T10:20:10.607 に答える