![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 27
|
Интересно. Что-то из этого я применю.
Но все же главная проблема заключается не в находения соприкосновения, а в нахождении растояния до него (чтоб ИЕ мог перерасчитывать напрваление движения) |
|
|||||
|
полярная система координат и массив [радиус векотор, угол] для пути движения или уравнение кривой....
если знаешь хоть чуток математику, поймешь,что с помошью уравнения можно нарисовать даже самую сумашедшую кривую
__________________
Голова она не только для того, чтобы кашу есть... |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 27
|
iNils - перечитай главный вопрос
seeker2005 - эт анриал, описать таким способом кривую можно, но я просто за*бусь это делать, для всех карт. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 27
|
Посмотри на рисунок.
На нем изображены два мувика IE и ROAD IE это просто круг; форма его не имеет никакого значения, нужны только его координаты на сцене ROAD - мувик со сложной формой (прямоугольник с стертой в ней областью) IE находится в стертой области ROAD Надо найти растояния от IE до нестертой области ROAD по вертикали и горизонтали в 4-ех напрвлениях (как показанно на рисунке) Функция которая написана в самом начале - это и делает. Но она жрет много ресурсов. Хотелось бы узнать возможно ли найти эти 4-е растояния каким-либо другим способом. |
|
|||||
|
Я тоже не совсем понял, чего тебе надо...
Если тебе надо кратчайщее растояние - то теорема Пифагора и решение тебе iNils уже дал. Если по кривой - кроме того метода, который я тебе предложил, я не знаю( В любом случае, когда ты работаешь на плоскости с одним направлением движения - самый оптимальный способ - полярная система координат. Ну а способы описания - либо дискретный в массиве (плюсы - не надо уравнения выдумывать), либо сполшной - уравнение
__________________
Голова она не только для того, чтобы кашу есть... Последний раз редактировалось seeker2005; 05.10.2005 в 15:18. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 27
|
Ну если вам непонятно мое описание, тогда всмотритесь в 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; Последний раз редактировалось leo99; 05.10.2005 в 15:52. |
|
|||||
|
Максимально быстрый способ - при загрузки игры проходись по кривой трасы hitTest, записывай координаты х и y в массив, потом просто когда надо будет определить растояние, будешь брать значение из массива...
Массив организовывай по какой либо переменной. Например по Х тогда каждому значению X у тебя будет соответствовать набор (массив) значений по Y (трасса ведь одну и ту же точку по X может пересекать несколько раз по Y)... После всего этого просто алгоритм обработки вложенных массивов в заданной точке X Когда получишь значение по Y, используя его можешь найти и разницу по Х.... если этот поиск будет долгим, то тогда сделай еще один массив точек, только сортированный по Y... Точности в пиксел тебе более чем достаточно, поэтому не парься с дробями, да и вычисления проще будут))
__________________
Голова она не только для того, чтобы кашу есть... |
|
|||||
|
Banned
[03.10.2005]
Регистрация: Nov 2003
Сообщений: 425
|
Искуственный интелект — IE, ржу нимагу
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|