我使用 Xcode 6、SpriteKit 和 Swift,
我有一个 SKSpriteNode,它是新 Xcode 项目的默认 spaceship 图像。这艘飞船有物理主体,但不受重力影响,我想模拟太空。
我希望当我点击屏幕时,会向节点施加一个力,以便飞船可以前进。问题是,当飞船旋转后,我尝试施加一个力,飞船不会像我想要的那样前进,而是沿着所施加的力的方向前进,这是正常的。
我想知道是否有任何方法可以根据节点的 zRotation 对节点施加力?所以无论飞船朝哪个方向,它都会一直向前。
最佳答案
我现在无法尝试,但它应该可以:
// 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,... 我对这一切都不太满意,尤其是现在还没有尝试,但正如我所说,它应该有效。让我知道!
关于swift - 根据节点的旋转对节点施加力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28771058/