在 Spritekit 中左右倾斜宇宙飞船

Tilting Spaceship left and right in Spritekit

我已经制作了一个小型 Space 射击游戏,就像许多其他已经制作的游戏一样 :-D,除了 Space 船的倾斜图像外,我已经确定了所有内容。

我使用了 3 个图像 - 左、中和右 - 虽然我可以让图像左右转动,但问题仍然存在,它只有在实际触摸屏幕的 left/right 侧时才会这样做,并且中心图像根本不显示,如果船不动,它应该显示。

如果有人能帮我照亮那个,那就太好了...

这是我的 touchesMoved 代码:

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

    for touch: AnyObject in touches{

        let pointOfTouch = touch.location(in: self)
        let previousPointOfTouch = touch.previousLocation(in: self)

        let amountDragged = pointOfTouch.x - previousPointOfTouch.x

        if currentGameState == gameState.inGame{
        player.position.x += amountDragged
        }

        if player.position.x > gameArea.maxX - player.size.width/2{
            print("Ship turning Right") //Log print to check if it works
            player.texture = SKTexture(imageNamed: "playerShipRight")
            player.position.x = gameArea.maxX - player.size.width/2
        }

        if player.position.x < gameArea.minX + player.size.width/2{
            print("Ship turning Left") //Log print to check if it works
            player.texture = SKTexture(imageNamed: "playerShipLeft")
            player.position.x = gameArea.minX + player.size.width/2
        }
    }
}

根据您的评论,我假设飞船在您触摸屏幕时一直在开火,因此您不能使用 touchesEnded 将飞船居中,因为您可能不想移动但仍想移动射击.

如果 ship.position = pointOfTouchamountDragged = 0 或某个较小的值,一个简单的解决方案是恢复到中心图像​​。

一种更复杂的方法是拥有大约 7 个船舶纹理的数组,代表船舶快速向左移动、中速、缓慢、静止、向右缓慢、向右中速和向右快速移动。然后,您可以使用 amountDragged 对该数组进行索引以获得正确的纹理。

如果需要,您也可以使用 touchesEnded 实现 'non-firing, non-moving' 纹理。