![]() |
Движение в случайную точку
Подскажите пожалуйста как задать клипу движение в случайную точку.
Зранее спасибо! |
Ну допустим есть у тебя точка(случайная, ага) с координатами nx и ny. И есть текущие координаты _x и _y. Чтобы двигаться в точку nx; ny тебе нужно найти вектор движения в ту точку
Код:
dx = nx-_x;Код:
l = Math.sqrt(dx*dx+dy*dy);Код:
dx/=l;Код:
_x+=dx*Speed;Мог в чем-то ошибиться, так как писал сразу в форуме. |
Division, не первый раз вижу эту штуку с квадратным корнем, но теперь вроде поймал автора))
Вот Вы мне объясните, ради чего Вам знать длину гипотенузы? Вы будете смещать клип не по Х и У, а сразу на столько-то пикселей по диагонали? http://flasher.ru/forum/showthread.php?t=112351 |
Длина гипотенузы(точнее длина вектора), нужна чтобы найти нормализованный вектор направления в нужную точку. Если этот нормализованный вектор умножить на скорость(Speed) и прибавить к нашим координатам, объект переместится ровно на Speed пикселей. Не понимаю что конкретно Вам не нравится (:
|
Цитата:
|
Блин, я не могу Вас понять (: Интересно, а как вы узнаете, на какое расстояние нужно смещаться по x и по y? Может покажите небольшой примерчик? Где объект с заданной скоростью будет двигаться в точку n.
PS 30 раз в секунду посчитать корень это не страшно. К тому же всегда остается простор для оптимизации. |
Это с постоянной скоростью
Код:
var dx = (nx-_mc._x)/speed;Код:
_mc.onEnterFrame = function(){ |
Ладно, с замедлением до нуля трогать не буду, но первый пример мне почему-то не нравится (:
То есть фактически скорость движения будет зависить от начального расстояние между точками. То есть условие "с заданной скоростью" вы не выполнили (: Да и скорость(speed) на самом деле не скорость, а число кадров, за которое объект доберется от начальной точки до конечной (: То есть если бы я делал игру, например, я бы хотел чтобы мой speed был реально скоростью, количеством пикселей, которое пройду за один кадр. Ваш вариант меня бы не устроил (: |
))) Дружище, я бы мог развернуть дискуссию на тему сколько клеток от одного угла тетрадного листа до другого, что собственно и есть пиксели) Но в общем-то Вы правы, я сделал не с заданной скоростью, а с постоянной.
А теперь вопрос - если у нас 30 кадров в секунду и мы достигаем точки за 10 кадров, то....? |
Ну я надеюсь Вы теперь не будете так вот к квадратным корням придираться? (:
UPD: Цитата:
SqSpeed = Speed*Speed; Потом при движении смотрим, если квадрат расстояния между точками (x2-x1)^2+(y2-y1)^2 меньше квадрата скорости SqSpeed, значит мы дошли до точки. На самом деле мы можем её немного "перепрыгнуть", так что можно смело ставить наши текущие координаты в точку N |
| Часовой пояс GMT +4, время: 15:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.