Xcode Swift SpriteKit SKSpriteNode Значение Y не перемещается, но X

#swift #xcode #sprite #skaction

#swift #xcode #спрайт #skaction

Вопрос:

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

  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:

Мне не совсем понятно, какова ваша конечная цель, но ваши расчеты кажутся. Особенно тот факт, что продолжительность перемещения составляет 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)
    }
}
  

Комментарии:

1. Хорошо, поэтому, когда я добавил, что y начал работать, но мне было интересно, есть ли способ заставить узел «player» двигаться с постоянной скоростью, которая просто движется в направлении newAngle. Спасибо за вашу помощь