globals 
conditionfunc condFAST = null
endglobals

function DamageFunc takes nothing returns boolean
	set uENUM = GetFilterUnit() 
                
	if not IsUnitType(uENUM, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(uENUM, GetOwningPlayer(uCAST)) and IsAlive(uENUM) then 
		call DamageUnit(uCAST, uENUM, LReal("Damage"), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL)
	endif
                
	return false
endfunction
                 
set condFAST = Condition(function DamageFunc)
call GroupEnumUnitsInRange(gFAST, x,y, 100, condFAST)
call DestroyCondition(condFAST)
или
call GroupEnumUnitsInRange(gFAST, x,y, 100, null)
loop
	set uENUM = FirstOfGroup(gFAST)
	exitwhen SysUnit == null
	
	if not IsUnitType(uENUM, UNIT_TYPE_STRUCTURE) and IsUnitEnemy(uENUM, GetOwningPlayer(uCAST)) and IsAlive(uENUM) then 
    	call DamageUnit(uCAST, uENUM, 10, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL)
    endif

	call GroupRemoveUnit(uENUM,gFAST)
endloop

Принятый ответ

Ну болекспры побыстрее, но разницы на глаз вы не увидите. Я вот хз че вы там велосипеды изоьритаете, нет классической способ - groupenumunitsinrange, с фильтром,куда глобалками передаём аргументыесли нужно, ну и for group для группы,ждля мгновенных действий где не надо хранить группу и где не вызывают я события триггеров ющающие эту группу,то можно юзать одну глобальную группу, быстрее ваших локальных чудес. . .
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
32
3 года назад
1
то я так и дальше бы имел 20 фпс при 90 единовременных снарядах в мапе.
И точно не метож перебора, вот у меня есть карта (ссылка не важна по ней никто не перейдёт и смотреть не будет), сделанная на 126, там юниты - снаряды, я тоже байтодрочил в своё время, и использовал и снаряд на отдельном таймере, и и все в группе и перебор через форгруп и перебор в булекспре , и снаряды отталкивалисб, проходили сковь, тонул в воде трассированные отскакивали от резины, друго от друга, расстраивались и не важно, не важно что я и как делал fps всегда был стабильны 60 для 126 патча. Всегда лишь одна проблема, когда fps падал это лишь число юнитов на экране, больше причин для падения производительности не было. Я эту карту делал на протяжении 4х лет и прохавал ну всё всё всё. Слушал всяких гуру советчиков, сам делал какие-то открытия. И снова приходил лишь к одному - ДАЖЕ ЕСЛИ НА ЭКРАНИЕ НИКТО НЕ ПЕРЕБИРАЕТСЯ в группах. то я испытываю только проблемы с числом юнитов на экране (энитов или декоров или доадов).
Тоже самое в рефордже сейчас благодаря анонимкам я делаю потом внутри потока на периодике внутрипериодика, вся на ультра малых периодах. И каким бы не был громоздким код - я ничего не теряю в производительности ну никак.
Всё что отбирает у вас производительность это юниты, декорации и доады
Я это написал в одном сообщении 3 раза, потому что реально, ну не факт перебора тут важен. И я это знаю уже 10 лет, и Назар это доказал, хоть какими-то бенчмарками, а то бы мне так никто бы и не верил

У меня 1800 сейчас без сталкивания(как у тебя), 380 со сталкиванием, при том что ты двигаешь каждые 0.1, а у меня 0.02, ы
Ясно даже не открывал, там 1/32 период, и снова не период важен а число материала на экране за экраном можно и 20к всего прокручивать, варкрафту всё так же по барабану будет

ещё раз откройте - "все способы переборы группы", разница в методах 1% максимум, 1% не повод для дискуссии
0
14
3 года назад
0
Bergi_Bear:
Если делать простое движение юнитов, то да, влияет больше модель, чем лишние 2-3 тика в цикле движения. Но когда ты добавляешь сталкивание этих снарядов(с проверкой), когда у каждого снаряда разная скорость, и прочее, то тут уже на производительность влияет количество, т.к. количество операций увеличивается в несколько раз(в геометрической прогрессии)

Bergi_Bear:
Из-за табуляции, не заметил 0.032 таймера
0
21
3 года назад
0
LainMikoroso, все эти ваши столкновения, разные скорости и т. д. делаются через векторы, которые считаются обычной арифметикой. Нагрузка от таких операций минимальна. Как берги и сказал, всё зависит от моделей, которые прорисовываются на экране.
0
17
3 года назад
Отредактирован Vlod
0
LainMikoroso, если вопрос в том, какой перебор группы вызывает большие лаги, то для этого запустите 1000 снарядов и перебирайте, постепенно уменьшая период. Какой способ быстрее вызовет лаги, тот и более тяжелый
0
32
3 года назад
0
Ну болекспры побыстрее, но разницы на глаз вы не увидите. Я вот хз че вы там велосипеды изоьритаете, нет классической способ - groupenumunitsinrange, с фильтром,куда глобалками передаём аргументыесли нужно, ну и for group для группы,ждля мгновенных действий где не надо хранить группу и где не вызывают я события триггеров ющающие эту группу,то можно юзать одну глобальную группу, быстрее ваших локальных чудес. . .
Принятый ответ
0
14
3 года назад
0
quq_CCCP:
Ну я так и думал в принципе, про глобалку на группу, я так и делаю
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.