2017-06-04 3 views
0

iOSのラグビーゲームアプリでSKConstraintを実装する際に苦労しています。スウィフトSKConstraint

基本的に私は「防御側」と呼ばれる複数のノードを作成します。その数は、特定のレベルに必要な数に応じて決まります。各ノードの名前はdefender + numberです。

3回の守備をスポーンする場合したがって、私は3つのディフェンダーノードが呼び出している:defender1、defender2は、これは私が最初の位置決めとディフェンダーのノードを起動するために使用されるコードである

をdefender3:

for defenderNumber in 1 ..< (numberDefenders+1) { 
     let defender = Defender(imageNamed: "defender_\(teamShirt)") 
     defender.position = CGPoint(x: defenderXposition, y: defenderYposition) 
     defender.size = CGSize (width: 50, height: 35) 
     defender.zPosition = 2 
     defender.name = "defender\(defenderNumber)" 
     defenderXposition = defenderXposition + defenderSpacing 
     addChild(defender) 

     } 

一部として防御側は様々な防御パターンで攻撃者を追いかける。しかし、私はディフェンダーが一緒にグループ化する傾向があることに気付きました。ディフェンダーが互いから最小限の距離を保つという制約を加えたいと思います。

私は私のようなSKConstraintを使用するだろうと思った:私は私のディフェンダースポーンコードで上記の制約のコードを入れてみましたが、効果があるとは思えない

let range = SKRange(lowerLimit:150, upperLimit:1000) let constraint = SKConstraint.distance(range, to:defender) defender.constraints = [constraint]

。コーダーの目に特に容易しかしその恐ろしく不格好とない - 誰がこの問題を持っている場合は

何かアドバイスが大幅

答えて

0

を高く評価し、私の周りの仕事を作成しました!

上記の問題は、反復ループでdefender childNodeを一度に追加するときに、特定の防御ノードをそのループ内に存在しない別の防御側に制限できないことでした。

これを回避するために、各ディフェンダーノードをゲームシーンに追加した後、別のノードの中にノード反復ループを入れました。どちらも同じディフェンダーノードのセットを繰り返しましたが、最初の反復ループの中で2番目の反復を「次のディフェンダー」と呼びました。だから、最初のループで育った各ディフェンダーのために、すべてのディフェンダーが2番目のノードに持ち込まれ、別のノード名が割り当てられた後、最初のすべての2番目の反復ノードに制約がリンクされました。

for defenderNumber in 1 ..< (self.numberDefenders+1) { 
     enumerateChildNodes(withName: "defender\(defenderNumber)", using: {node, stop in 

      let defender = node as! Defender 

      for defenderNumber in 1 ..< (self.numberDefenders+1) { 
       self.enumerateChildNodes(withName: "defender\(defenderNumber)", using: {node, stop in 

        let nextdefender = node as! Defender 
        let range = SKRange(lowerLimit:50) 
        let constraint = SKConstraint.distance(range, to:nextdefender) 
        defender.constraints = [constraint] 
       }) 

      } 
     }) 

    } 

これは、誰もがこれを達成するための、よりエレガントな方法を持っている場合、私は非常に感謝することを私の目はそんなに痛いです!