У меня есть функция, которая срабатывает каждые 0.05 секунд. Она даёт или обновляет ауру ближайшим наземным миньонам. Для этого она проходит через их массив, где будет не более ~60 занятых ячеек.
Код функции
caster - источник ауры, p - игрок, к которому был послан caster, range_image - индикатор радиуса ауры, p.minions - массив миньонов, m.minion - ссылка на юнита, который связан со структурой Minion, abildata.range - радиус ауры, call BuffAirSupport.start - старт или обновление баффа ауры.
method cooldownEnd takes nothing returns nothing
local integer a = 0
local Minion m = caster
local CustomPlayer p = m.foe
call SetImagePosition(range_image, GetUnitX(m.minion), GetUnitY(m.minion), 0.)
loop
set m = p.minions[a]
if IsUnitType(m.minion, UNIT_TYPE_GROUND) and GetDistanceUnits(caster.minion, m.minion) <= abildata.range then
call BuffAirSupport.start(m, data, caster.owner, armor)
endif
set a = a + 1
exitwhen a > p.minions.top
endloop
endmethod
Я подумал, что можно это сделать с помощью группы.
Версия через группу
static method filter takes nothing returns boolean
local Minion m = GetUnitUserData(GetFilterUnit())
if IsUnitType(GetFilterUnit(), MinionClass) and IsUnitType(m.minion, UNIT_TYPE_GROUND) and m.out_of_spawn then
call BuffAirSupport.start(m, Data, Owner, Armor)
endif
return false
endmethod
static constant group Group = CreateGroup()
static integer Data
static integer Owner
static integer Armor
method cooldownEndNew takes nothing returns nothing
local integer a = 0
local Minion m = caster
call SetImagePosition(range_image, GetUnitX(m.minion), GetUnitY(m.minion), 0.)
set Data = data
set Owner = m.owner
set Armor = armor
call GroupEnumUnitsInRange(Group, GetUnitX(m.minion), GetUnitY(m.minion), abildata.range, function thistype.filter)
endmethod
Какая из версий быстрее?
Принятый ответ
любой штатный способ быстрее любого велосипеда. группа будет быстрее перебора массива юнитов. переменная лучше, чем постоянные GetFilterUnit()
если дашь мне код в чистом жассе, я могу прямо в лайве замеры сделать
если дашь мне код в чистом жассе, я могу прямо в лайве замеры сделать
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован PT153
Точнее этот метод вызывается функцией, который связан с таймером с периодом в 0,05 с.
Отредактирован PT153
И вообще-то не микросекунд, а 50 миллисекунд.
если дашь мне код в чистом жассе, я могу прямо в лайве замеры сделать