Anufis
offline
Опыт:
6,290Активность: |
Оптимизация перебора типа юнитов
Есть способы как-нибудь этот перебор по-человечески сделать(через БД какую-нибудь или еще как)?
Код:
|
09.05.2014, 11:56 | #1
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
хеш таблица же.
еще можно сказать ассоциативный массив.
или нет, можно сказать бинарный свичкейс.
даю подсказку 'ABCD' это число, которые попадает в границы 32 бита. |
09.05.2014, 14:09 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nvc123
new status
offline
Опыт:
59,284Активность: |
боже спаси мои глаза
nvc123 добавил: кстати адик точно попадёт в ад |
09.05.2014, 14:24 | #3
+3/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
Цитата:
Проблема в том, что я не осведомлен, как code сохранять в хеш-таблицу и вижу тут 2 варианта 1. потестить через triggeraction 2. иметь ассоциативный массив для строк названий функций и их потом исполнять(но тут надо будет учесть, чтобы оптимизитор не портил имена этих функций) В общем сделаю через 2 вариант. |
|
09.05.2014, 14:26 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
nvc123
new status
offline
Опыт:
59,284Активность: |
Anufis,сама структура кода не правильна у тебя вместо кучи функций лучше сделать 1 но с разными данными(то есть просто передаём индекс параллельных массивов) |
09.05.2014, 14:49 | #5
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
Anufis:
Юзай SaveStr и ExecuteFunc + глобальные переменные... |
09.05.2014, 15:06 | #6
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
я тут сделал данную конструкцию но для себя и на яве, вот код:
Тоже самое что у вас, один в один. |
10.05.2014, 12:23 | #7
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Я знаю как оптимизировать: убрать все return. |
10.05.2014, 21:19 | #8
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
есть три вида преобразования множества значений (маппинг):
|
11.05.2014, 01:22 | #9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Anufis
offline
Опыт:
6,290Активность: |
Вопрос собственно в том, как это реализовать через ассоциативный массив.
Проблемы: code array запрещены, в хеш-таблицу code не сохраняется, хранить массив строк и экзекутить функции через ExecuteFunc не хочется, потому что мне кажется, что оптимизатор покорежит названия этих функций(скажем вместо моих AI1,AI2,AI3,AI4, ... AI100 будет что-то другое и ExecuteFunc просто не найдет нужных функций). И есть еще нормальный вариант - это 1 функция, которая просто для типа юнита из хеш-таблицы будет брать набор команд, скажем 1. атаковать ближайшего врага в радиусе 1200 2. применить приказ absorb на случайного врага в радиусе 600 иначе попытаться перейти к ближайшему противнику в радиусе 3000 Юнитов в карте не будет больше 60 одновременно, периодичность таймера - 1 секунда. Так что в принципе это не должно дать сильного удара по производительности. Anufis добавил: Впринципе, то, что я наваял сейчас, и решает все проблемы. Код:
Отредактировано Anufis, 11.05.2014 в 15:20. |
11.05.2014, 15:14 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,598Активность: |
Anufis:
Не порежит, во первых в твиках есть настройки что нужно исключить при оптимизации... во вторых оптимизатор не трогает названия функций вроде a b c в ax bx cy и тп, просто пропуская их, а назвать функции так же как оптимизатор тебе ничего не мешает... |
11.05.2014, 15:43 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
креститься пора!
"мне кажется что если кинуть яблок вверх оно не упадёт" а ты кидал яблоко "нет не кидал, ведь оно не упадёт и я останусь без яблока" ты дебил? "репор штраф ты меня троллишь" |
11.05.2014, 19:18 | #12
+4/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Меняются название только у public и private, без этих префиксов не меняются. Более того, я в свое время просто переводит равкод в строку и делал ExecuteFunc ("s"+I2S(GetSpellAbilityId()));.
Избегайте неявные идентификаторы. Используйте enum в cJass и константы в vJass. |
11.05.2014, 21:57 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|