2017-11-05 19 views
0

重力と反発特性を持つボールを含むゲームを作成します(すべてのボールはランダム関数によって異なるプロパティを持ちます)。今度は、各ボールの最後の位置を検出し、ノードからの削除関数を呼び出したいと思います。私は画面上でジャンプ中にボールの位置を検出するために更新機能を使用しています。私はできるかどうかわからないし、どうすればその最後の位置を検出できるのか?私はそれぞれのポジションを格納する配列を作成することを考えていますが、正しい方法があるかどうかわかりませんし、シンプルで優れた方法があるのだろうかと思います。ここ は、今の私のコードです:はノードの最終位置を検出します

override func update(_ currentTime: TimeInterval) { 

    self.enumerateChildNodes(withName: "BALL") { (node:SKNode, nil) in 
     print(node.position) 
    } 
} 

は、あなたはそれで私を助けることができますか?配列オプションは唯一の方法ですか、別の方法とより良い方法がありますか?

答えて

0

ボールをサブクラス化し、位置を格納する独自のプロパティを追加できます。アップデートで

class BallNode: SKShapeNode { 
    var lastPosition: CGPoint? 
} 

let ball = BallNode() 
ball.name = “BALL” 
ball.position = CGPoint.zero 
self.addChild(ball) 

....

override func update(_ currentTime: TimeInterval) { 
    self.enumerateChildNodes(withName: "BALL") { (node:BallNode, nil) in 
     print(node.position) 
     if let last= node.lastPosition { 
      print(last) 
      // do something with last 
     } 
     //Update last position before end of updatE 
     node.lastPosition = node.position 

    } 
} 
+0

私はボールをサブクラス化する必要がありますか?今すぐ私は関数createBall() - > SKNodeを持っている、それは大丈夫ですか? – omerc

+0

サブクラス化しなければ、ここで提案したようにすることはできません。 – TheValyreanGroup

+0

私はそうしようとしている間に私は混乱する。あなたが言及したようにクラスを設定しましたが、私がskshapenodeとして設定しようとすると、「GameScence.BallNode」と入力すると「skshapenode型の値を代入できません」というエラーが出ます。私は物理的性質を持っているのでskshapenodeと打ち込む必要があります – omerc

関連する問題