对子弹施加冲动

时间:2016-07-08 01:13:10

标签: swift sprite-kit trigonometry skspritenode

我有球员(SKSpriteNode)他可以移动和旋转,我想从他身上射出五颗子弹,但是还有另一个角度。我使用这段代码:

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

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

但是,我不知道如何用角度正确设置矢量。我尝试做这样的事情:enter image description here

任何人都可以帮助我!

1 个答案:

答案 0 :(得分: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)