我有球員(SKSpriteNode
),他可以移動和旋轉,我想從他身上射出5發子彈,但有另一個角度。我用這個代碼:對子彈施加衝動
let sinus = sin(player.zRotation)
let cosinus = cos(player.zRotation)
bullet.physicsBody!.applyImpulse(CGVector(dx: -sinus * 100, dy: cosinus * 100))
任何人都可以幫助我!
我有球員(SKSpriteNode
),他可以移動和旋轉,我想從他身上射出5發子彈,但有另一個角度。我用這個代碼:對子彈施加衝動
let sinus = sin(player.zRotation)
let cosinus = cos(player.zRotation)
bullet.physicsBody!.applyImpulse(CGVector(dx: -sinus * 100, dy: cosinus * 100))
任何人都可以幫助我!
與此圖據:
你必須改變你的子彈的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)
你熟悉的極座標?如果你要考慮在極座標系中作爲方位角旋轉需要做什麼,那麼你可以在最後一點轉換回直角座標系,以便傳遞給函數 – Feldur