Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как узнать: увеличивается ли расстояние между объектами или наоборот? (http://www.flasher.ru/forum/showthread.php?t=128998)

loover 21.08.2009 22:06

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

Obi 21.08.2009 22:07

Сравнивать их расстояние каждый кадр. Если следующее больше предыдущего, значит увеличивается.
Расстояние находится по формуле Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));

Герыч 21.08.2009 22:41

наверно более быстрый вариант - спроецировать смещение на вектор между ними и поглядеть на знак, тем более если p поделить на Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)), то получим скорость сближения:
Код AS3:

p=((x1-xold1)-(x2-xold2))*(x1-x2)+((y1-yold1)-(y2-yold2))*(y1-y2);
if(p<0)
  trace("сближаются");
else
  trace("расходятся");

Надо сравнить с предложенным выше на скорость и выбрать лучший.
P.S. может в знаке ошибся

loover 21.08.2009 22:58

спасибо. а как узнать, в какую сторону (вверх или вниз) движется объект? видимо, нужно сравнивать положение объекта с предыдущим его состоянием. только вот как?

Felicast 21.08.2009 23:01

Код AS3:

Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))

а зачем использовать вычисление корня. можно вполне обойтись (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)
я думаю, если увеличивается расстояние, то будет увеличиваться и квадрат расстояния. (хотя если нужно знать расстояние точно, то нужно и корень извлеч)

Добавлено через 3 минуты
Цитата:

а как узнать, в какую сторону (вверх или вниз) движется объект?
если ((xOld - xNew) > 0), то влево, ((xOld - xNew) < 0) - вправо
соответственно: ((yOld - yNew) > 0) - вверх, ((yOld - yNew) < 0) - вниз

iflamberg 21.08.2009 23:04

2loover: что значит как? Чудес в этой вселенной не бывает. Если вам нужно сравнить положение объекта с его предыдущим состоянием, то это значит, что это предыдущее состояние надо запомнить.

loover 22.08.2009 00:12

в том то и дело: я не знаю когда сохранять одно значение, а когда его сравнивать с текущим.

мне нужно что-то типа скроллера. т.е. чтобы один объект сдвигался относительно другого при перемещении последнего. например, если ползунок сдвинулся на 1 - контент на 2.3. можно запоминать значение в момент MOUSE_MOVE и, если текущее положение объекта не равно этому значению, обновить значение. но это нормально работает, если мышь двигается не очень быстро. в противном случае MOUSE_MOVE отслеживает сдвиг не на один пиксель, а как получится.

AL.exe 22.08.2009 06:10

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

VVall 22.08.2009 11:40

Цитата:

Сообщение от loover (Сообщение 844684)
в том то и дело: я не знаю когда сохранять одно значение, а когда его сравнивать с текущим.

Сохранять надо сразу перед изменением. Какие ещё могут быть варианты?


Часовой пояс GMT +4, время: 23:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.