我有球员(SKSpriteNode
)他可以移动和旋转,我想从他身上射出五颗子弹,但是还有另一个角度。我使用这段代码:
let sinus = sin(player.zRotation)
let cosinus = cos(player.zRotation)
bullet.physicsBody!.applyImpulse(CGVector(dx: -sinus * 100, dy: cosinus * 100))
任何人都可以帮助我!
答案 0 :(得分:0)
根据此图表:
您必须更改子弹的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)