Xcode Swift SpriteKit SkSpriteNode значение Y не движется, но X

В действии перемещения значение Y не меняется, и я не знаю, почему, потому что меняется значение X. Переменная changeY выполняет свою работу с правильным значением 5.0 или -5.0, но значение Y на SkSpriteNode игрока не меняется. Пожалуйста помочь.

 override func update(_ currentTime: TimeInterval) {

    let percent = touchLocation.x / size.width
    let newAngle = percent * 180 - 180
    print(newAngle)
    if playButtonPressed{

        var changeY = 0.0
        if newAngle >= -180{
            changeY = 5.0
        }
        else{
            changeY = -5.0
        }
        player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0
        print(changeY)
        var move = SKAction.moveBy(x: -(player.position.x+1), y: CGFloat(changeY), duration: 2000.0)
        player.run(move)
    }
}

1 ответ

  1. Мне не совсем ясно, какова ваша конечная цель,но ваши расчеты кажутся. Особенно тот факт, что длительность движения составляет 2000 секунд. Это больше чем 30 минут(!) X-вычисления также предполагают, что вы на самом деле планировали использоватьmoveTo, а не moveByтак, как вы делаете в настоящее время.

    Нижеприведенное основано на вашем коде, но я не уверен, что ваша фактическая цель для этого делает следующее: перемещается влево+вверх, если прикосновение находится на левой стороне экрана, перемещается вниз+вправо, если прикосновение находится на правой стороне экрана…

    override func update(_ currentTime: TimeInterval) {
        if playButtonPressed {
            let percent = touchLocation.x / size.width
            let newAngle = percent * 180 - 180
            player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0
    
            let moveRightAndUp = touchLocation.x>size.width/2
            let changeY: CGFloat = moveRightAndUp ? 5.0 : -5.0
            let changeX: CGFloat = moveRightAndUp ? 1.0 : -1.0
            let move = SKAction.moveBy(x: changeX, y: changeY, duration: 1/60)
            player.run(move)
        }
    }