Sprite kit (Xcode Swift SpriteKit)如何沿精灵面对的方向移动精灵

Sprite kit (Xcode Swift SpriteKit)如何沿精灵面对的方向移动精灵,sprite-kit,swift3,skaction,Sprite Kit,Swift3,Skaction,我在屏幕的中央有一个精灵,它可以向左或向右旋转,这是通过触摸屏幕的左或右部分来确定的 我想做的是让精灵不断向前移动,但始终朝着它所面对的方向移动。我知道如何做基本动作与动作等。。。但是我不知道我是如何计算出,在精灵旋转的方向上,运动是连续的 数学从来都不是我的强项,所以非常感谢一些示例代码来帮助我 var player = SKSpriteNode() override func didMove(to view: SKView) { player = SKSpriteNode(i

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

我想做的是让精灵不断向前移动,但始终朝着它所面对的方向移动。我知道如何做基本动作与动作等。。。但是我不知道我是如何计算出,在精灵旋转的方向上,运动是连续的

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

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

}
var player=SKSpriteNode()
覆盖func didMove(到视图:SKView){
player=SKSpriteNode(图像名为:“4B.png”)
播放器设置刻度(0.3)
player.zPosition=100
self.addChild(播放器)
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
如果让触摸=先触摸{
让位置=触摸。位置(in:self)
如果位置.x<0{
让rotate=SKAction.repeatForever(SKAction.rotate(按角度:CGFloat(M_PI),持续时间:2))
游戏者。奔跑(旋转,按键:“旋转”)
}否则{
让rotate=SKAction.repeatForever(SKAction.rotate(按角度:CGFloat(-M_PI),持续时间:2))
游戏者。奔跑(旋转,按键:“旋转”)
}
}
}
覆盖函数touchesend(touchs:Set,带有事件:UIEvent?){
玩家移动动作(福基:“旋转”)
}
覆盖函数更新(uCurrentTime:TimeInterval){
//在渲染每个帧之前调用
}

}

您需要使用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)表示向下看