2017-08-11 18 views
1

GameplayKitの使用方法、特にエージェント&の動作を習得しようとしています。すべてのチュートリアルとそのサンプルを、自分のアプリの出発点として使うことができる小さくてシンプルなコードに煮詰めようとしています。残念ながら、私が思いついたことは、うまく動作せず、なぜ私は理解できません。それは単純なGKGoal(toWander :)を持つ単純なスプライトです。放浪するのではなく、ちょうど右に、まっすぐに動きます。それは私の最高速度&の加速をばかげて高い値に設定しているにもかかわらず、非常にゆっくりと始まり、非常にゆっくりと加速します。私は単純なコードとそこにあるすべての複雑な例の根本的な違いを理解できません。ここでは、コードですが、マイナスrequired init?(coder aDecoder: NSCoder)GameplayKit GKGoal:放浪することができません

class GremlinAgent: GKAgent2D { 
    override init() { 
     super.init() 

     maxAcceleration = 100000 
     maxSpeed = 1000000 
     radius = 20 
    } 

    override func update(deltaTime seconds: TimeInterval) { 
     super.update(deltaTime: seconds) 
     let goal = GKGoal(toWander: 100) 
     behavior = GKBehavior(goal: goal, weight: 1) 
    } 
} 

class Gremlin: GKEntity { 
    let sprite: SKShapeNode 

    init(scene: GameScene) { 
     sprite = SKShapeNode(circleOfRadius: 20) 
     sprite.fillColor = .blue 

     scene.addChild(sprite) 

     super.init() 

     let agent = GremlinAgent() 
     addComponent(agent) 

     let node = GKSKNodeComponent(node: sprite) 
     addComponent(node) 
     agent.delegate = node 
    } 
} 

そしてGameScene.swift、didMove(to view:)中:

let gremlin = Gremlin(scene: self) 
entities.append(gremlin) 

誰も私を助けることはできますか?

答えて

1

elsewhereと指摘されているように、目標の重みを非常に高く設定する必要があります。 100または1000を試し、動作の違いに気づく。しかし、これらの大きな重みがあっても、あなたの例ではまだ問題があります:maxSpeedの値です。あなたはそれを高く設定することはできません、またはあなたのスプライトはまっすぐに飛ぶだけです。 GKGoalオブジェクトで設定した速度に近い値に設定します。

また、散逸は常にスプライトが指し示す方向に開始するので、常に右に移動しないようにするには、zRotationをいくつかのランダムな値に設定します。

最後に、update()のすべての呼び出しで新しい動作を作成しないでください。放浪のために、例えば、init()のように一度だけ設定することができます。

ここで働くいくつかのコードです:

class GremlinAgent: GKAgent2D { 
    override init() { 
     super.init() 

     maxAcceleration = 100000 
     maxSpeed = 100 

     let goal = GKGoal(toWander: 100) 
     behavior = GKBehavior(goal: goal, weight: 1000) 
    } 
} 

class Gremlin: GKEntity { 
    let sprite: SKShapeNode 

    init(scene: GameScene) { 
     sprite = SKShapeNode(circleOfRadius: 20) 
     sprite.fillColor = .blue 
     sprite.zRotation = CGFloat(GKRandomDistribution(lowestValue: 0, highestValue: 360).nextInt()) 

     scene.addChild(sprite) 

     super.init() 

     let agent = GremlinAgent() 
     addComponent(agent) 

     let node = GKSKNodeComponent(node: sprite) 
     addComponent(node) 
     agent.delegate = node 
    } 
} 
関連する問題