(Xcode Swift SpriteKit)如何在精灵面向的方向上移动精灵

时间:2017-01-03 16:11:52

标签: sprite-kit swift3 skaction

我在屏幕中央有一个精灵,可以向左或向右旋转,这可以通过触摸屏幕的左侧或右侧来确定。

我想要做的是让精灵不断向前移动,但始终朝向它面向的方向。我知道如何使用SKActions等进行基本运动......但是我不知道如何计算运动在精灵旋转到的方向上连续运动?

数学从来都不是我的强项,所以非常感谢一些示例代码来帮助我。

var player = SKSpriteNode()

override func didMove(to view: SKView) {



    player = SKSpriteNode(imageNamed: "4B.png")
    player.setScale(0.3)
    player.zPosition = 100
    self.addChild(player)


}



override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    if let touch = touches.first {
        let position = touch.location(in: self)

        if position.x < 0 {
            let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 2))
            player.run(rotate, withKey: "rotating")
        } else {
            let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(-M_PI), duration: 2))
            player.run(rotate, withKey: "rotating")
        }

    }

}



override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    player.removeAction(forKey: "rotating")
}



override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered

}

}

1 个答案:

答案 0 :(得分:3)

你需要使用sin和cos。 SKAction对你来说可能不是最好的,所以我现在就在更新方法中这样做,直到找到更好的位置:

sprite.position = CGPoint(x:sprite.position.x + cos(sprite.zRotation) * 10,y:sprite.position.y + sin(sprite.zRotation) * 10)

其中10是您希望精灵移动的幅度(也就是移动10个像素)

这假设角度0表示精灵正在向右看,角度90(PI / 2)向上看,角度180(PI)向左看,角度270(3PI / 2)向下看。