2016-07-08 8 views
1

私は彼が移動して回転できるプレイヤー(SKSpriteNode)を持っていますが、私は彼から5発の弾を別の角度で撃ちたいと思います。私はこのコードを使用します:弾丸に衝動を適用する

let sinus = sin(player.zRotation) 
let cosinus = cos(player.zRotation) 

bullet.physicsBody!.applyImpulse(CGVector(dx: -sinus * 100, dy: cosinus * 100)) 

しかし、私はどのように角度でベクトルを正しく設定するのか分かりません。私はこのようなものを作ろうとします:enter image description here

誰も助けてください!この図によると

+0

はあなたが極座標に精通していますが?極座標で方位角を回転させる必要があると考えるならば、最後の点で直角座標に変換して – Feldur

答えて

0

enter image description here

あなたの弾丸のzRotationを変更する必要があります。

let rotate = SKAction.rotateByAngle(angle, duration: 0.01) 

次のことができます。

extension CGFloat { 
    var radiansToDegrees: CGFloat { 
     return self * CGFloat(180.0/M_PI) 
    } 
    var degreesToRadians: CGFloat { 
     return self * CGFloat(M_PI/180.0) 
    } 
} 

は、あなたも(また、この1つはラジアンで表される)を使用することができ、あなたの弾丸を回転させるには:あなたが必要とするので、もし

zRotationはラジアンで表現されていることを忘れないでください弾丸のインパルスの速度と角度も計算します。

extension CGVector { 
    func speed() -> CGFloat { 
     return sqrt(dx*dx+dy*dy) 
    } 
    func angle() -> CGFloat { 
     return atan2(dy, dx) 
    } 
} 

あなたがあなたのコメントについて詳細にhere

を説明するように、画面のタッチでこれらの要素を接続することができます必要がある場合は、この式(すでに私のリンクで説明)を使用することができます:

let angle = atan2(location.y - cannon.position.y , location.x - cannon.position.x) 
cannon.zRotation = angle - CGFloat(M_PI_2) 
+0

に渡すことができます? – DonMugad

+0

撮影するには、あなたがしているように衝動を適用することができます –

+0

私は衝動に角度を追加する方法を尋ねます – DonMugad

関連する問題