Форум 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=141483)

sersir 25.06.2010 21:39

Найти ближайший объект
 
Всем привет. Не кидайте в меня помидорами, но я практически никогда в своем коде не использовал массивы, как-то обходился без них. А теперь возникла задача - написать код, который через список массивов ищет ближайший объект. В принципе я знаю через что это реализовывать, то есть надо найти ближайшое расстояние до объекта, аля dist = (en._x-_x)*(en._x-_x)+(en._y-_y)*(en._y-_y); а потом через метод for перебрать массивы - for (var z = 0; z<список массивов.length; z++). Вроде всё понятно. Но я что-то не могу рассчитать через это всё, не понимаю как проанализировать, например, что 1 объект дальше или ближе 2,3... Собственно вопрос: Как это реализовать, чтобы объект искал ближайшего.

Если у кого есть примеры, то был бы очень признателен =)

Jitakuzu 25.06.2010 23:01

Эмммм..)) Может так?
Код AS1/AS2:

min_dist=999999;targ=-1;
for (z = 0; z<массив.length; z++) {
 dist=get_dist(); //функция, которая возвращает тебе расстояние до цели z
 if (dist<min_dist) { min_dist=dist;targ=z;}
}
/*
если targ=-1, то массив пуст,
иначе, id ближайшей цели = targ
*/


sersir 26.06.2010 20:41

Спасибо за пример Jitakuzu. А функция, которая возвращает расстояние до цели z, как должна работать ? То есть она обнуляет значения, чтобы можно было найти новое расстояние до ближайшей цели ?

Jitakuzu 26.06.2010 22:21

Например, если у тебя есть главный объект main_obj (тот, от которого будет расчитываться расстояние) и множество объектов obj_1,obj_2,...,obj_n (до которых будет расчитываться расстояние), то функция должна иметь примерно такой вид:
Код AS1/AS2:

_root.get_dist=function(obj_num) {//obj_num - номер объекта
 delta_x = main_obj._x-["obj"+obj_num].targ_x;
 delta_y = main_obj._y-["obj"+obj_num].targ_y;
 return (Math.sqrt((delta_x*delta_x)+(delta_y*delta_y)));
}

Не обязательно использовать именно функцию - можно этот код прямо в цикл вставить))

udaaff 26.06.2010 22:30

Jitakuzu, оформляйте в следующий раз код.

sersir 28.06.2010 17:00

Jitakuzu спасибо большое!


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

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