XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
ZeToX2007

offline
Опыт: 7,009
Активность:
и опять же меня волнует скорость...
Допустим у нас имеется:

Код:
globals
    unit array AllUnit
endglobals


Когда мы создаём какого либо юнита мы добовляем его в масив, при смерти удаляем...

И сам вопрос, что будет быстрее:
1.Использовать группа например выбрать каждого юнита в радиусе 600 от юнита и сделать действия.
2.Переберать каждого юнита в масиве и делать проверку на растояние.
Старый 21.08.2009, 18:34
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Вероятно массив будет быстрее, потому что Пик выбирает всех юнитов из внутреннего массива юнитов по кондиции (???).
Старый 21.08.2009, 18:38
adic3x

offline
Опыт: 108,439
Активность:
правильнее по моему использовать группу тут, хотя зависит от количества юнитов в массив, которые будут проверяться
Старый 21.08.2009, 18:51
ZeToX2007

offline
Опыт: 7,009
Активность:
Цитата:
Сообщение от ADOLF
количества юнитов в массив

меньше 300

ZeToX2007 добавил:
Цитата:
Сообщение от ADOLF
правильнее по моему использовать группу

А разве скорость не зависит от юнитов на карте ? сдесь получается, что создаётся новая группа, туда заносятся юниты, которые удолетворяют данному условию и потом совершаются действия...

В массиве сразу, проверяет условие и если удолетворяет, совершает те или иные действия.

или я в чем-то ошибаюсь ?
Старый 21.08.2009, 19:11
J
expert
offline
Опыт: 48,447
Активность:
А разве скорость не зависит от юнитов на карте ?
независит
Старый 21.08.2009, 19:12
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ZeToX2007, группа может быть создана всего 1 раз при инициализации. В группу юнит не заносится, при пике сразу проверяется расстояние и производится действие.
Старый 21.08.2009, 19:13
J
expert
offline
Опыт: 48,447
Активность:
перебрать все и вся проверяя на условии, пройтись по циклу от 0 и до конца проверяя условие, и прочии нубо решения - это удел нубо кодеров, никто этим при разработке игр незанимается
Старый 21.08.2009, 19:14
ZeToX2007

offline
Опыт: 7,009
Активность:
Цитата:
Сообщение от Hellfim
ZeToX2007, группа может быть создана всего 1 раз при инициализации. В группу юнит не заносится, при пике сразу проверяется расстояние и производится действие.

Бред

Цитата:
Сообщение от J
перебрать все и вся проверяя на условии, пройтись по циклу от 0 и до конца проверяя условие, и прочии нубо решения - это удел нубо кодеров, никто этим при разработке игр незанимается

А как к примеру, это реализовано с++ в варике ?


допустим у тебя есть 3 масива.
Массив Имен
Массив Зарплат
Массив Ещё хз чего

Как по твоему по, имени найти зарплату =/ если же не перебором ?
Старый 21.08.2009, 19:34
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ZeToX2007
  1. Аргументы?
  2. У меня нету трех массивов, у меня класс, начнем с этого =)
Старый 21.08.2009, 19:55
ZeToX2007

offline
Опыт: 7,009
Активность:
~Hellfim, потому что создаётся новая группа:

function GetUnitsInRectMatching takes rect r, boolexpr filter returns group
local group g = CreateGroup() создание группы
call GroupEnumUnitsInRect(g, r, filter) занесение в группу юнитов
call DestroyBoolExpr(filter)
return g
endfunction

а потом
call ForGroup(whichGroup, callback)
по этой группы выполняется действия.

Цитата:
Сообщение от Hellfim
У меня нету трех массивов, у меня класс, начнем с этого =)

Ну) на vJass структура это несколько масивов) ну все же же ?

Все базовые алгоритмы, которые изучаются в вузах основанны на переборах !
Старый 21.08.2009, 20:08
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ZeToX2007, ВНЕЗАПНО
globals
    tempGroup=CreateGroup()
endglobals

function MyActions takes nothing returns boolean
    if <условие> then
        <действия>
    endif
    return false
endfunction

//Где-то в далекой-далекой функции
local rect r=Rect(-256,-256,256,256)//К примеру
call GroupEnumUnitsInRect(tempGroup,r,Filter(MyActions))
//Что-то там дальше
Hellfim добавил:
Думаю что я бы искал по ид.
Старый 21.08.2009, 20:15
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Ммм... а кто тогда обьяснит мне внутренне устройство функции GroupEnumUnitsIn.... ?
PlayerDark добавил:
Hellfim, ты не понял основной идеи, как осуществляется пик всех юнитов ?
Старый 21.08.2009, 20:17
ZeToX2007

offline
Опыт: 7,009
Активность:
Hellfim, так сразу и надо говорить, тут работает действия с одной группой, перебирая каждого юнита сопоставляет условия... в массивах почти тоже самое. Но в чем же проблема ? то что алгоритм скомпилированный на С++ быстрее чем какие либо алгоритмы на jass. вот и хотелось бы узнать на сколько быстрее...
Старый 21.08.2009, 20:29
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
PlayerDark, вместо GroupEnumUnitsInRect можно написать любую из этих функций
» функции
native GroupEnumUnitsOfType                 takes group whichGroup, string unitname, boolexpr filter returns nothing
native GroupEnumUnitsOfPlayer               takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
native GroupEnumUnitsOfTypeCounted          takes group whichGroup, string unitname, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRect                 takes group whichGroup, rect r, boolexpr filter returns nothing
native GroupEnumUnitsInRectCounted          takes group whichGroup, rect r, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRange                takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRangeOfLoc           takes group whichGroup, location whichLocation, real radius, boolexpr filter returns nothing
native GroupEnumUnitsInRangeCounted         takes group whichGroup, real x, real y, real radius, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsInRangeOfLocCounted    takes group whichGroup, location whichLocation, real radius, boolexpr filter, integer countLimit returns nothing
native GroupEnumUnitsSelected               takes group whichGroup, player whichPlayer, boolexpr filter returns nothing
Мне кажется, что так делать логичнее, чем заносить в массив.
Старый 21.08.2009, 20:29
J
expert
offline
Опыт: 48,447
Активность:
Все базовые алгоритмы, которые изучаются в вузах основанны на переборах !
конешно, какбудто они тебе будут обьеснять тебе такие вещи как граф сцены, сетка сцены, фристум кулинг, бинарное разбиение пространство, хеш таблицы, красно черные и подобные деревья
Старый 21.08.2009, 20:30
ZeToX2007

offline
Опыт: 7,009
Активность:
Цитата:
Сообщение от J
хеш таблицы

А ещё хеш массивы как раз котороми можно:
Цитата:
Сообщение от ZeToX2007
найти зарплату =/


но в jass'e много чего нет полезного.

Цитата:
Сообщение от Hellfim
Мне кажется, что так делать логичнее, чем заносить в массив.


На логику плевать, мне важней что быстрее.. и всего лишь
Старый 21.08.2009, 20:47
J
expert
offline
Опыт: 48,447
Активность:
На логику плевать, мне важней что быстрее.. и всего лишь
native GroupEnumUnitsInRange takes group whichGroup, real x, real y, real radius, boolexpr filter returns nothing
Старый 21.08.2009, 20:49
ZeToX2007

offline
Опыт: 7,009
Активность:
J, так вопрос заключался в скорости, а не в логике =/
Старый 21.08.2009, 21:02
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
ZeToX2007, он тебе дал самый быстрый вариант.
Старый 21.08.2009, 21:35
ScorpioT1000
Работаем
online
Опыт: отключен
конешно, какбудто они тебе будут обьеснять тебе такие вещи как граф сцены, сетка сцены, фристум кулинг, бинарное разбиение пространство, хеш таблицы, красно черные и подобные деревья
нам объясняли все на 1 курсе ))
ScorpioT1000 добавил:
Все базовые алгоритмы, которые изучаются в вузах основанны на переборах !
такчто фейл
ScorpioT1000 добавил:
У меня нету трех массивов, у меня класс, начнем с этого =)
где ты нашел класс там? юнит?
допустим у тебя есть 3 масива.
Массив Имен
Массив Зарплат
Массив Ещё хз чего
Как по твоему по, имени найти зарплату =/ если же не перебором ?
преобразовываем имя в персональный ключь и переходим на ячейку зарплаты ВНЕЗАПНО =O
Старый 22.08.2009, 00:18
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:52.