#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. Спасибо за вашу помощь