Swift-按角度

时间:2017-01-15 01:50:56

标签: swift xcode skphysicsbody skaction sknode

我想知道是否尽可能让SKNode向特定方向前进,但只有一个因素。我知道应用冲动和设定物理体的速度,但它们都由两个因素决定; dx和dy。我也知道用SKActions旋转到一个角度。但是,一旦物体被设置成一个角度,它是否有可能简单地“向前移动”?或者只用一个因子来设定它的速度?

提前致谢。

2 个答案:

答案 0 :(得分:1)

当然,我认为你所说的是这样的:

现在假设您有一个名为SKSpriteNode的{​​{1}},他最终拥有了physicalBody设置。

player

您可以设置其速度的var player: SKSpriteNode! 属性,因此假设您想要将它们水平移动到用户点击屏幕右侧的位置。然后,如果您使用dx

检测触摸的位置
touchesBegan(_:)

编辑: -

既然你说你只想在不知道目的地的情况下水平移动你的玩家,你就可以做这样的事情,这只是让玩家每秒在x轴上向前移动50分,然后重复它永远。显然你想根据自己的喜好调整它。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else { return }
    // Replace with name of node to detect touch
    let touchLocation = touch.location(in: <NAME_OF_NODE_PROPERTY>)

    // Verify it's in front of the player and not behind
    if (touchLocation.x - playerPosition.x) > 0 {
        movePlayerVertically(toward: touchLocation)
    }
}

func movePlayerVertically(toward location: CGPoint) {

    let dx:CGFloat = location.x - player.position.x
    player.physicsBody!.velocity.dx = dx

}

答案 1 :(得分:0)

是的,是您问题的答案。

我认为你在寻找=推动......对吗?

你想要的是“船”能够在任何方向上旋转,并且推力要正确地应用,从船的“屁股”中移出,以船舶术语向前移动。

这绝对是可能的,但确实需要一些“虚拟”技巧。

但我很困惑你。

SKPhysicsBody的本地空间是相对于其父级的。我相信。

还有投机部分。我正在猜测。我没试过这个。

但是......大多数物理学家都是一个SKNode的孩子,他是这个场景的代表。

如果您为了旋转而将您的船舶变为虚拟节点,然后旋转虚拟节点,您应该能够通过简单地旋转虚拟节点使您的太空飞船在没有改变推力矢量的情况下飞行。

理论上

像这个可怕的伪代码可能有助于开始...也许。

let dummy = SKNode()
let ship = SKSPriteNode()
dummy.addchild(ship)

ship.Physicsbody(add how you want here...)
ship.PhysicsBody.applyForce (vector that's only X, for example)

rotate dummy with action over time...