[Вопрос] Выбор юнита
|
|
Smartaros | Дата: Понедельник, 13 Августа 2012, 19:35:55 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| Есть ли такая функция, которая выбирает в радиусе от точки ближайшего юнита к этой точке? если нет, то кому не трудно - напишите.
|
|
|
|
Bibo | Дата: Понедельник, 13 Августа 2012, 20:40:57 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Quote (Smartaros) Есть ли такая функция, которая выбирает в радиусе от точки ближайшего юнита к этой точке? Нету, руками собираешь в группу юнитов и пикая каждого проверяешь расстояние до точки. Quote (Smartaros) если нет, то кому не трудно - напишите. Да ладно тебе, давай просто скинь нам карту, напишешь все что нужно по пунктам, а мы тебе под диктовочку сделаем.
|
|
|
|
Borodach | Дата: Понедельник, 13 Августа 2012, 21:16:16 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Smartaros, Посмотреть че по чем
Karamba
|
|
|
|
kapa6acvlk | Дата: Понедельник, 13 Августа 2012, 21:38:40 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| а я вот так написал Code function DistanceBetween takes unit u, real x, real y returns real local real dx = x - GetUnitX(u) local real dy = y - GetUnitY(u) return SquareRoot(dx * dx + dy * dy) endfunction
function Distance takes real x, real y, real r returns unit local group g = CreateGroup() local unit array u local real array d local integer i = 0 local integer I = 0 local unit result local real a call GroupEnumUnitsInRange(g,x,y,r,null) loop set u[i] = FirstOfGroup(g) exitwhen u[i] == null call GroupRemoveUnit(g, u[i]) set d[i] = DistanceBetween(u[i],x,y) set i = i + 1 endloop set a = d[0] loop set I = I + 1 exitwhen I == i //call BJDebugMsg(I2S(I)) // call BJDebugMsg(GetUnitName(u[I])) //call BJDebugMsg(R2S(d[I])) if(a > d[I])then set a = d[I] set result = u[I] endif set u[I] = null endloop call DestroyGroup(g) set g = null return result endfunction
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
Сообщение отредактировал kapa6acvlk - Понедельник, 13 Августа 2012, 21:40:29 |
|
|
|
SirNikolas | Дата: Вторник, 14 Августа 2012, 06:58:41 | Сообщение # 5 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code //uses: group udg_G, unit udg_U function GetClosestUnit takes real x, real y, real r, boolexpr b returns unit local real d = r * r local real dx local real dy local unit u set udg_U = null call GroupEnumUnitsInRange(udg_G, x, y, r, b) loop set u = FirstOfGroup(udg_G) exitwhen u == null call GroupRemoveUnit(udg_G, u) set dx = GetWidgetX(u) - x set dy = GetWidgetY(u) - y if dx * dx + dy * dy <= d then set udg_U = u set d = dx * dx + dy * dy endif endloop return udg_U endfunction
|
|
|
|
bubliq | Дата: Среда, 15 Августа 2012, 17:22:02 | Сообщение # 6 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: -12
Блокировки:
| set dx = GetWidgetX(u) - x set dy = GetWidgetY(u) - y
Я бы за такое вообще удалял с юзеров - звание джассеров. Такой бред мог написать только тупой. GetWidgetX - работает в десятки раз дольше чем GetUnitX - но офк, автор данной функции не шарит.
|
|
|
|
Ty3uK | Дата: Среда, 15 Августа 2012, 22:46:23 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| насколько я знаю, виджет работает быстрее юнита - функции класса родителя, как никак. но автор поста выше явно шарит я не жассер
|
|
|
|
bubliq | Дата: Четверг, 16 Августа 2012, 12:29:14 | Сообщение # 8 |
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: -12
Блокировки:
| Quote (Ty3uK) насколько я знаю, виджет работает быстрее юнита - функции класса родителя, как никак. но автор поста выше явно шарит Он работает в условии GetWidgetLife(xxx) но никак не в GetWidgetXY - причин масса, основная, там офк, наследование, но наследование настолько сделанно неверно, что, если ты случайно можешь, при смещениях в хеш таблицах например, двигать итемы или деревья (если есть система воскрешения тех же деревьев с импользованием хеш таблицы), да и сама перекодировка, именно в просчётах координат, там очень длительно выполняется.
|
|
|
|