2017-07-15 8 views
4

Swift 3とSpritekitを使用してアプリケーションを開発する際に問題が発生しました。私は衝突を検出するために正方形を構成する4つの別々の三角形を作った。これらの三角形を1つの単位として回転させると、回転中に重なり合って正方形の形を保持せず(互いに重なり合っています)、回転が完了すると正常に戻ります。ユニットとして回転するときにスプライトノードが重複する

これは私が回転するために使用されるコードです:

以下
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in touches{ 
     let location = touch.location(in: self) 

     if location.x < 0 { 
      blueTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      redTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      yellowTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      greenTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 

     } else if location.x > 0 { 
      blueTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      redTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      yellowTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      greenTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
     } 
    } 
} 

は私を気軽にしてください4つの別々の三角形

square

で構成された私の正方形の写真ですあなたが見る必要がある他のコードは、任意の入力が役立ちます。また、私は重複した問題を行動で得ることができませんでしたので、事前に申し訳ありませんが、私はそれを得るために最善を尽くします。

答えて

8

問題は、独自の座標系に従って回転する単一の三角形を回転させることです。各三角形が中心に固定され、その周りを回転しているとします。明らかに、三角形は重なり合うでしょう。あなたは一意のポイントの周りにそれらを回転させる必要があります。

// This is the configuration to do in sceneDidLoad 
let node = SKNode() 
node.addChild(blueTriLeft) 
node.addChild(redTriLeft) 
node.addChild(yellowTriLeft) 
node.addChild(greenTriLeft) 
scene.addChild(node) 

// Inside touchesBegan(_:, with:) 
node.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
+0

は、私はタッチで宣言しなければならない関数やクラスでを開始しました:あなたのケースでは、それを行うための最も簡単な方法は、同じ親ノードに追加して、親を回転させることですか? –

+0

blueTriLeft = self.childNode(withName: "blueTriLeft")as! SKSpriteNode –

+0

^^^^^^これは上記の解決策に打ち勝つでしょう –

関連する問題