swift - 根据节点的旋转对节点施加力

标签 swift rotation sprite-kit skphysicsbody

我使用 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/

相关文章:

ios - iOS12重装应用后不再请求访问

ios - 折线未显示在谷歌地图中

swift - 字典无法从 Objective-C 桥接 -> Swift 中的问题

c# - 从 3 个点检索正角或负角

jQuery - CSS - 通过拖动鼠标事件旋转 Div

ios - 如何让 SKEmitterNode 在 SwiftUI 中工作?

ios - Swift - NSDictionary 可选值崩溃

php - 如何在 Windows 计算机上使用 PHP 旋转 pdf 内容?

ios - 在整个屏幕上自由移动播放器

swift - 当我从一个节点切换到另一个节点时,是否应该删除所有 SKSpriteNodes 和标签