根据节点的旋转对节点应用力

applyForce to a node according to its rotation

我使用 Xcode 6、SpriteKit 和 Swift、

我有一个 SKSpriteNode,它是新 Xcode 项目的默认太空飞船图像。这space飞船有物理体,但不受重力影响,我想模拟space.

我希望当我点击屏幕时,一个力会施加到节点上,这样 spaceship 就可以前进。问题是当 spaceship 已经旋转并且我尝试施加力时,spaceship 不会像我想要的那样前进,而是沿着施加力的方向前进,这是正常的。

我想知道是否有任何方法可以根据节点的 zRotation 对节点施加力?所以无论space飞船朝哪个方向,它都会一直向前。

我现在无法尝试,但应该可以:

// grab the spaceship rotation and add M_PI_2
var spaceShipRotation : CGFloat = spaceShipNode.zRotation
var calcRotation : Float = Float(spaceShipRotation) + Float(M_PI_2);

// cosf and sinf use a Float and return a Float
// however CGVector need CGFloat
let intensity : CGFloat = 10.0 // put your value
let xv = intensity * CGFloat(cosf(calcRotation))
let yv = intensity * CGFloat(sinf(calcRotation))
let vector : CGVector = CGVectorMake(xv, yv)

// apply force to spaceship
spaceShipNode.physicsBody?.applyForce(vector)

您必须使用数学,或者更准确地说是使用三角函数,其中包括:PI、cos、sin、... 我对所有这些都不太满意,尤其是现在还不想尝试,但正如我所说,它应该有效。让我知道!