Как сделать скорость спрайта такой же? - PullRequest
0 голосов
/ 09 марта 2020

Я начал писать простую игру, чтобы улучшить свои навыки SpriteKit в Xcode, используя быстрый язык. В моей игре есть только один спрайт, который меняет положение на месте, где я нажимал на экран. Я сделал это так:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
    ZombieNode.run (SKAction.move(to: CGPoint(x: location.x, y: location.y), duration: 1))
 }
}

Но есть только одна проблема, скорость моего спрайта зависит от того, где я нажал. Поэтому я понимаю, почему - потому что спрайт должен изменить местоположение за одну секунду, поэтому, если я нажимаю далеко от своего спрайта, скорость будет выше, если я нажимаю рядом, чтобы спрайт, скорость очень низкая. Поэтому мой вопрос - как сделать скорость такой же? Возможно, я должен использовать другую функцию вместо

 ZombieNode.run (SKAction.move(to: CGPoint(x: location.x, y: location.y), duration: 1))

или, возможно, для этого есть математические формулы. Помогите, пожалуйста, как я могу сделать скорость одинаковой везде?

1 Ответ

1 голос
/ 09 марта 2020

Сначала необходимо выполнить проверку расстояния, а затем умножить продолжительность на коэффициент расстояния.

Используя теорему Пифагора о x 2 + y 2 = расстояние 2

let deltaX = location.x - current.x
let deltaY = location.y - current.y

let distance = (deltaX * deltaX + deltaY * deltaY).squareRoot()

Then you can get a ratio, using the distance you'd like to travel in a second.  For example, if you'd like to move at 400 pixels per second you could do the following:

let pixelsPerSecond = 400

let timeToTravel = distance/pixelsPerSecond

Затем используйте время, чтобы добраться сюда:

ZombieNode.run (SKAction.move(to: CGPoint(x: location.x, y: location.y), duration: timeToTravel))
...