2016-03-19 20 views
0

私はSpriteKitとGameplayKitで遊んでいます。しかし、私がコードを実行するとき、私が振り回したいスプライトは何もしません。GKComponentSystemには更新サイクルでコンポーネントがありません

私はいくつかの値を印刷するlldbを使用し、これはプリントアウトです:

(lldb) po agentSystem.components 
▿ 1 elements 
    - [0] : <GKAgent2D: 0x7fc1b8e55ff0> 

(lldb) po agentSystem.components 
0 elements 

最初はaddComponentWithEntity:が呼び出された直後に印刷されます。 2番目はupdate:メソッドで表示されます。

もちろん、これはスプライトがさまよっていない理由でなければなりませんが、何が原因で問題になる可能性がありますか?

Appleのsample code for Agentsのコードを調べて使用しましたが、それでも問題を解決していないようです。私は同様の問題があった

import SpriteKit 
import GameplayKit 

class GameScene: SKScene 
{ 
    // MARK: - Properties 

    let agentSystem = GKComponentSystem(componentClass: GKAgent2D.self) 

    var lastUpdateTimeInterval: CFTimeInterval = 0.0 


    // MARK: - Scene Lifecycle 

    override func didMoveToView(view: SKView) 
    { 
     // Wave enemy 
     let agent = GKAgent2D() 
     agent.behavior = GKBehavior(goal: GKGoal(toWander: 10), weight: 100) 

     let waveEnemy = WaveEnemy() 
     waveEnemy.addComponent(agent) 

     agentSystem.addComponentWithEntity(waveEnemy) 

     let waveSprite = waveEnemy.componentForClass(VisualComponent)!.spriteNode 
     waveSprite.position = CGPoint(x: frame.size.width * 0.5, y: frame.size.height * 0.5) 

     addChild(waveSprite) 
    } 

    override func update(currentTime: CFTimeInterval) 
    { 
     if lastUpdateTimeInterval == 0 
     { 
      lastUpdateTimeInterval = currentTime 
     } 

     let deltaTime: CFTimeInterval = currentTime - lastUpdateTimeInterval 
     lastUpdateTimeInterval = currentTime 

     // Update component system 
     agentSystem.updateWithDeltaTime(deltaTime) 
    } 
} 

答えて

2

:ここ

は私のシーンのコードです。私のGKEntityには弱い参照があったため、GKComponentSystemから自動的に削除されました。

あなたの場合は、waveEnemyを作成する必要があります。シーンの配列に格納することができます。

class GameScene: SKScene { 

    ... 

    var enemies = [GKEntity]() 

    override func didMoveToView(view: SKView) { 
     ... 
     let waveEnemy = WaveEnemy() 
     waveEnemy.addComponent(agent) 
     enemies.append(waveEnemy) // Creates a strong reference for waveEnemy 
     ... 
    } 

    ... 

} 
+0

私が正しく覚えている場合、これは私のための修正です - 質問を更新するのを忘れてしまった!返信をありがとう:) –

+0

それは素晴らしいです、ありがとう! PS。弱い/強い参照をデバッグする方法はありますか? –

+0

ああ私の良さ私は何時間も探してきました!これは私のゲームを完全に修正しました!どうもありがとうございました。 var enemies = [GKEntity]()行を追加して、新しいエンティティを追加して、強い参照を作成することは、私が紛失した唯一のものでした。ありがとうございました! – retrovius

関連する問題