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

Swift 根据节点的旋转对其应用力,swift,rotation,sprite-kit,skphysicsbody,Swift,Rotation,Sprite Kit,Skphysicsbody,我使用Xcode 6、SpriteKit和Swift 我有一个SKSpriteNode,它是一个新Xcode项目的默认宇宙飞船图像。这艘宇宙飞船有一个物理体,但不受重力的影响,我想模拟这个空间 我希望当我点击屏幕时,一个力被施加到节点上,这样宇宙飞船就可以前进了。问题是当宇宙飞船旋转时,我试着施加一个力,宇宙飞船不会像我想的那样前进,而是沿着施加的力的方向前进,这是正常的 我想知道是否有任何方法可以根据节点的zRotation向节点施加力?因此,无论宇宙飞船朝哪个方向飞行,它都会继续前进。我现在

我使用Xcode 6、SpriteKit和Swift

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

我希望当我点击屏幕时,一个力被施加到节点上,这样宇宙飞船就可以前进了。问题是当宇宙飞船旋转时,我试着施加一个力,宇宙飞船不会像我想的那样前进,而是沿着施加的力的方向前进,这是正常的


我想知道是否有任何方法可以根据节点的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)
你必须学习数学,或者更准确地说是三角学,包括:π,cos,sin。。。
我对所有这些都不太适应,尤其是现在还没有尝试,但正如我所说的,它应该会起作用。让我知道

是的,它工作得很好!我知道我可以用三角学来做,但我想知道spritekit中是否有一种方法可以让我直接做,但是谢谢!我不知道,但我对SpriteKit也是新手。如果找到本机方法,我将添加一个答案。同时,或者如果它不存在,您需要经常使用它:您可能想要扩展
SKPhysicsBody
,以便添加您自己的方法,比如applyforforward。是的,这可能是一个好主意,但我更喜欢调用CGVector和CGPoint的方法,然后根据节点的Z轴旋转计算新向量的方向和新点的位置,我会试试,但我不知道我是否有能力做到这一点,首先我要看一下你的代码并试着理解它这里有一个方法
applyForce:atPoint:
()。但我不确定结果是否相同,应用时可能包括角度旋转。现在不能尝试,如果你尝试一下,请告诉我!如果结果相同,请冷静。Overwise,您将能够在某个时候创建自己的方法!:)我已经试过了,这是我做的第一件事,它不包括角度旋转。我试图实现我的方法(我编辑了我的第一篇文章),但它似乎不起作用。。。