Форум 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)
-   -   Как узнать растояние между Movie ??? (http://www.flasher.ru/forum/showthread.php?t=69923)

leo99 05.10.2005 13:48

Интересно. Что-то из этого я применю.

Но все же главная проблема заключается не в находения соприкосновения, а в нахождении растояния до него (чтоб ИЕ мог перерасчитывать напрваление движения)

iNils 05.10.2005 14:03

x1 = 0;
x2 = 1;
y1 = 0;
y2 = 1;
trace (Math.sqrt (Math.pow ((x1 - x2), 2) + Math.pow ((y1 - y2), 2)));
Где x1,x2,y1,y2 это координаты центра машин

seeker2005 05.10.2005 14:05

полярная система координат и массив [радиус векотор, угол] для пути движения или уравнение кривой....
если знаешь хоть чуток математику, поймешь,что с помошью уравнения можно нарисовать даже самую сумашедшую кривую

leo99 05.10.2005 14:35

iNils - перечитай главный вопрос

seeker2005 - эт анриал, описать таким способом кривую можно, но я просто за*бусь это делать, для всех карт.

iNils 05.10.2005 14:41

Перчитал и не понял чего ты хочешь.

leo99 05.10.2005 15:09

Посмотри на рисунок.
На нем изображены два мувика IE и ROAD

IE это просто круг; форма его не имеет никакого значения, нужны только его координаты на сцене

ROAD - мувик со сложной формой (прямоугольник с стертой в ней областью)

IE находится в стертой области ROAD

Надо найти растояния от IE до нестертой области ROAD по вертикали и горизонтали в 4-ех напрвлениях (как показанно на рисунке)

Функция которая написана в самом начале - это и делает. Но она жрет много ресурсов.

Хотелось бы узнать возможно ли найти эти 4-е растояния каким-либо другим способом.

seeker2005 05.10.2005 15:15

Я тоже не совсем понял, чего тебе надо...
Если тебе надо кратчайщее растояние - то теорема Пифагора и решение тебе iNils уже дал. Если по кривой - кроме того метода, который я тебе предложил, я не знаю(
В любом случае, когда ты работаешь на плоскости с одним направлением движения - самый оптимальный способ - полярная система координат. Ну а способы описания - либо дискретный в массиве (плюсы - не надо уравнения выдумывать), либо сполшной - уравнение

leo99 05.10.2005 15:45

Ну если вам непонятно мое описание, тогда всмотритесь в Script

Он создает масив (mass) в котором будут возвращенны эти 4-растояния (mass["R"], mass["L"], mass["D"], mass["U"]), каждое растояние расчитывается по одному принципу, например для mass["R"] - растояние от IE до ROAD по оси +Х
//movie._x, movie._y ==== _root.IE._x, _root.IE._y

for (i=1; i<=_root.road._width; i++)
{
if (_root.road.hitTest(movie._x+i, movie._y, true)) {break;}
}
mass["R"]=i;

seeker2005 06.10.2005 06:47

Максимально быстрый способ - при загрузки игры проходись по кривой трасы hitTest, записывай координаты х и y в массив, потом просто когда надо будет определить растояние, будешь брать значение из массива...
Массив организовывай по какой либо переменной. Например по Х
тогда каждому значению X у тебя будет соответствовать набор (массив) значений по Y (трасса ведь одну и ту же точку по X может пересекать несколько раз по Y)...
После всего этого просто алгоритм обработки вложенных массивов в заданной точке X
Когда получишь значение по Y, используя его можешь найти и разницу по Х....
если этот поиск будет долгим, то тогда сделай еще один массив точек, только сортированный по Y...

Точности в пиксел тебе более чем достаточно, поэтому не парься с дробями, да и вычисления проще будут))

ultraflasher 06.10.2005 09:30

Искуственный интелект — IE, ржу нимагу :D


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

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