2016-07-08 22 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

記住zRotation以弧度表示,所以如果你需要:

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

要旋轉你的子彈,你也可以使用(也這一個以弧度表示):

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

你可以也算的速度和你的子彈衝動的角度:

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