2013-06-27 5 views
-1

Я перемещаю персонаж, используя синус и cos.Как сделать условие остановки движения

player.x += Math.cos(angle) * speed; 
player.y += Math.sin(angle) * speed; 

Текущее состояние останова - distance < n. Но если скорость слишком высокая, иногда персонаж не останавливается и продолжает навсегда. Каков наилучший способ заставить его остановиться в нужном месте?

PS: он перемещается с помощью мыши. Я нажимаю кнопку, и игрок перемещается прямо в точку клика.

ответ

0

Быстрое решение проблемы заключается в том, чтобы проверить, является ли текущий distance короче предыдущего (тот, который был в предыдущем анимационном кадре). Это будет означать, что персонаж приближается к цели. Если он не приближается к нему (текущее расстояние фактически выше предыдущего), это означает, что оно уже прошло, поэтому оно должно остановиться.

В псевдокоде:

if distance < n or lastDistance<distance then 
    stop; 
lastDistance = distance; 

После остановки, вы должны найти символ в позиции цели (в противном случае, он будет оставаться статичным в overshooted положении).

РЕДАКТИРОВАТЬ: Если вы не возражаете против остановки символа, прежде чем он достигнет своей цели, вы можете попытаться использовать значение n, которое зависит от текущего speed. Таким образом, если персонаж идет быстро, он остановится, когда он окажется в большей области.

Смежные вопросы