Сейчас 02:39:46 Воскресенье, 29 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Выбор юнита
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
Блокировки:
а я вот так написал :D
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
Блокировки:
насколько я знаю, виджет работает быстрее юнита - функции класса родителя, как никак. но автор поста выше явно шарит
я не жассер :(


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

bubliqДата: Четверг, 16 Августа 2012, 12:29:14 | Сообщение # 8
2 уровень
Группа: Пользователи
Сообщений: 24
Награды: 0
Репутация: -12
Блокировки:
Quote (Ty3uK)
насколько я знаю, виджет работает быстрее юнита - функции класса родителя, как никак. но автор поста выше явно шарит

Он работает в условии GetWidgetLife(xxx) но никак не в GetWidgetXY - причин масса, основная, там офк, наследование, но наследование настолько сделанно неверно, что, если ты случайно можешь, при смещениях в хеш таблицах например, двигать итемы или деревья (если есть система воскрешения тех же деревьев с импользованием хеш таблицы), да и сама перекодировка, именно в просчётах координат, там очень длительно выполняется.
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz