![]() |
Интересно. Что-то из этого я применю.
Но все же главная проблема заключается не в находения соприкосновения, а в нахождении растояния до него (чтоб ИЕ мог перерасчитывать напрваление движения) |
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 это координаты центра машин |
полярная система координат и массив [радиус векотор, угол] для пути движения или уравнение кривой....
если знаешь хоть чуток математику, поймешь,что с помошью уравнения можно нарисовать даже самую сумашедшую кривую |
iNils - перечитай главный вопрос
seeker2005 - эт анриал, описать таким способом кривую можно, но я просто за*бусь это делать, для всех карт. |
Перчитал и не понял чего ты хочешь.
|
Посмотри на рисунок.
На нем изображены два мувика IE и ROAD IE это просто круг; форма его не имеет никакого значения, нужны только его координаты на сцене ROAD - мувик со сложной формой (прямоугольник с стертой в ней областью) IE находится в стертой области ROAD Надо найти растояния от IE до нестертой области ROAD по вертикали и горизонтали в 4-ех напрвлениях (как показанно на рисунке) Функция которая написана в самом начале - это и делает. Но она жрет много ресурсов. Хотелось бы узнать возможно ли найти эти 4-е растояния каким-либо другим способом. |
Я тоже не совсем понял, чего тебе надо...
Если тебе надо кратчайщее растояние - то теорема Пифагора и решение тебе iNils уже дал. Если по кривой - кроме того метода, который я тебе предложил, я не знаю( В любом случае, когда ты работаешь на плоскости с одним направлением движения - самый оптимальный способ - полярная система координат. Ну а способы описания - либо дискретный в массиве (плюсы - не надо уравнения выдумывать), либо сполшной - уравнение |
Ну если вам непонятно мое описание, тогда всмотритесь в 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; |
Максимально быстрый способ - при загрузки игры проходись по кривой трасы hitTest, записывай координаты х и y в массив, потом просто когда надо будет определить растояние, будешь брать значение из массива...
Массив организовывай по какой либо переменной. Например по Х тогда каждому значению X у тебя будет соответствовать набор (массив) значений по Y (трасса ведь одну и ту же точку по X может пересекать несколько раз по Y)... После всего этого просто алгоритм обработки вложенных массивов в заданной точке X Когда получишь значение по Y, используя его можешь найти и разницу по Х.... если этот поиск будет долгим, то тогда сделай еще один массив точек, только сортированный по Y... Точности в пиксел тебе более чем достаточно, поэтому не парься с дробями, да и вычисления проще будут)) |
Искуственный интелект — IE, ржу нимагу :D
|
| Часовой пояс GMT +4, время: 17:08. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.