Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение в случайную точку (http://www.flasher.ru/forum/showthread.php?t=114720)

PANKRAT 06.08.2008 22:38

Движение в случайную точку
 
Подскажите пожалуйста как задать клипу движение в случайную точку.
Зранее спасибо!

Division 06.08.2008 23:06

Ну допустим есть у тебя точка(случайная, ага) с координатами nx и ny. И есть текущие координаты _x и _y. Чтобы двигаться в точку nx; ny тебе нужно найти вектор движения в ту точку
Код:

dx = nx-_x;
dy = ny-_y;

Потом найдем длину вектора -
Код:

l = Math.sqrt(dx*dx+dy*dy);
Далее
Код:

dx/=l;
dy/=l;

После этого в onEnterFrame объекта пишем

Код:

_x+=dx*Speed;
_y+=dy*Speed;

Где Speed - это наша скорость.

Мог в чем-то ошибиться, так как писал сразу в форуме.

Wolsh 06.08.2008 23:09

Division, не первый раз вижу эту штуку с квадратным корнем, но теперь вроде поймал автора))
Вот Вы мне объясните, ради чего Вам знать длину гипотенузы? Вы будете смещать клип не по Х и У, а сразу на столько-то пикселей по диагонали?


http://flasher.ru/forum/showthread.php?t=112351

Division 06.08.2008 23:29

Длина гипотенузы(точнее длина вектора), нужна чтобы найти нормализованный вектор направления в нужную точку. Если этот нормализованный вектор умножить на скорость(Speed) и прибавить к нашим координатам, объект переместится ровно на Speed пикселей. Не понимаю что конкретно Вам не нравится (:

Wolsh 06.08.2008 23:44

Цитата:

Чтобы двигаться в точку nx; ny тебе нужно найти вектор движения в ту точку
Да Господь с Вами, мне вполне достаточно смещаться по Х и по У, пока они не станут равны координатам точки n. А не нравится тридцать раз в секунду высчитывать квадратные корни)))

Division 06.08.2008 23:54

Блин, я не могу Вас понять (: Интересно, а как вы узнаете, на какое расстояние нужно смещаться по x и по y? Может покажите небольшой примерчик? Где объект с заданной скоростью будет двигаться в точку n.
PS 30 раз в секунду посчитать корень это не страшно. К тому же всегда остается простор для оптимизации.

Wolsh 07.08.2008 00:23

Это с постоянной скоростью
Код:

var dx = (nx-_mc._x)/speed;
var dy = (ny-_mc._y)/speed;
_mc.onEnterFrame = function(){
        this._x += dx
        this._y += dy
}

Это с замедлением до нуля))
Код:

_mc.onEnterFrame = function(){
        this._x += (nx-this._x)/speed;
        this._y += (ny-this._y)/speed;
}


Division 07.08.2008 00:30

Ладно, с замедлением до нуля трогать не буду, но первый пример мне почему-то не нравится (:
То есть фактически скорость движения будет зависить от начального расстояние между точками. То есть условие "с заданной скоростью" вы не выполнили (: Да и скорость(speed) на самом деле не скорость, а число кадров, за которое объект доберется от начальной точки до конечной (: То есть если бы я делал игру, например, я бы хотел чтобы мой speed был реально скоростью, количеством пикселей, которое пройду за один кадр. Ваш вариант меня бы не устроил (:

Wolsh 07.08.2008 00:37

))) Дружище, я бы мог развернуть дискуссию на тему сколько клеток от одного угла тетрадного листа до другого, что собственно и есть пиксели) Но в общем-то Вы правы, я сделал не с заданной скоростью, а с постоянной.
А теперь вопрос - если у нас 30 кадров в секунду и мы достигаем точки за 10 кадров, то....?

Division 07.08.2008 00:43

Ну я надеюсь Вы теперь не будете так вот к квадратным корням придираться? (:

UPD:
Цитата:

А теперь вопрос - если у нас 30 кадров в секунду и мы достигаем точки за 10 кадров, то....?
Упс, не заметил. Я не совсем понял Ваш вопрос. Если нужно определить, когда нужно остановится, то это делается довольно просто. Так как у нас есть скорость Speed и Вы почему-то не любите корни, найдем квадрат скорость

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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.