Скилл - Юнит приблизился к другому
|
|
Smartaros | Дата: Понедельник, 03 Декабря 2012, 00:19:25 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| как делать скиллы типа мин и ловушек триггерно, я делал через привязки таймеров и проверкой юнитов вокруг, но это нагружает комп, есть у кого нибудь код конструкции, который по минимуму нагружает железо?
|
|
|
|
Extremator | Дата: Понедельник, 03 Декабря 2012, 00:32:31 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| создаешь мину и добавляешь её с ивентом "приблизился на дистанцию" в триггер с действиями взрыва
|
|
|
|
Smartaros | Дата: Понедельник, 03 Декабря 2012, 00:36:06 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| т.е. без эвентов никак?
|
|
|
|
Extremator | Дата: Понедельник, 03 Декабря 2012, 00:37:25 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Smartaros) т.е. без эвентов никак? для тебя это сложно? оО
помойму просто... создал мину -> добавил имент... ивент сработал - взорвал мину/нанёс урон
|
|
|
|
Smartaros | Дата: Понедельник, 03 Декабря 2012, 00:39:01 | Сообщение # 5 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| мина взорвалась - эвент остался, это нехорошо. Мин может быть очень много
|
|
|
|
Extremator | Дата: Понедельник, 03 Декабря 2012, 00:56:42 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| Quote (Smartaros) мина взорвалась - эвент остался, это нехорошо. Мин может быть очень много мина ушла из игрового процеса... и... ивент с ней как бы тоже...
а вообще нада посмрашивать...
|
|
|
|
Smartaros | Дата: Понедельник, 03 Декабря 2012, 01:05:48 | Сообщение # 7 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| протести это на карте 5к+ декораций на 1к мин и отпишись че да как, фрапс надеюсь есть
|
|
|
|
TohaAKA | Дата: Понедельник, 03 Декабря 2012, 05:53:24 | Сообщение # 8 |
6 уровень
Группа: Проверенные
Сообщений: 160
Награды: 0
Репутация: 45
Блокировки:
| Для каждой мини создавать триггер, динамически. При взрыве удалять его и мину. Учим джазз, в типа лучшем пособии это есть.
|
|
|
|
SirNikolas | Дата: Понедельник, 03 Декабря 2012, 10:14:00 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Extremator) мина ушла из игрового процеса... и... ивент с ней, как бы, тоже... Нет.
Думаю, надо использовать один таймер с периодом не меньше .25. При этом перебирать, используя одну (глобальную) группу.
|
|
|
|
Smartaros | Дата: Понедельник, 03 Декабря 2012, 22:54:22 | Сообщение # 10 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| Quote (TohaAKA) Учим джазз шутник Quote (SirNikolas) Думаю, надо использовать один таймер с периодом не меньше .25. При этом перебирать, используя одну (глобальную) группу. А ты подобное не делал, думал накатаешь код какой-нибудь как обычно) про группу еще понимаю, но один таймер... на все мины, напиши плз.
|
|
|
|
SirNikolas | Дата: Вторник, 04 Декабря 2012, 12:23:10 | Сообщение # 11 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Smartaros) думал накатаешь код какой-нибудь как обычно) Должны же вы сами чему-то учиться) Ладно, накатаю.
|
|
|
|
Smartaros | Дата: Среда, 05 Декабря 2012, 20:08:48 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| накатал?
|
|
|
|
SirNikolas | Дата: Среда, 05 Декабря 2012, 20:31:48 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code library_once G { constant group G = CreateGroup(); }
scope Trap { include "cj_types_priv.j"; define { private PERIOD = .1; private RADIUS = 200.; } private bool Cond(unit u) { return GetWidgetLife(u) > .405;//Сюда еще можно добавить условие, что юнит - не мина. } private constant timer T = CreateTimer(); private unit trap[ ]; private int top = 0; private void onTimer() { for (int i = 0; i < top; i++) { for (unit u; UnitsInRange(GetWidgetX(trap[i]), GetWidgetY(trap[i]), RADIUS) use G) { if u != trap[i] && Cond(u) { KillUnit(u); //Boom! if --top == 0 { PauseTimer(T); } else { trap[i] = trap[top]; } } } } } public void Add(unit u) { trap[top++] = u; if top == 1 { TimerStart(T, PERIOD, true, function onTimer); } } public bool Remove(unit u) { for (int i = 0; i < top; i++) { if u == trap[i] { if --top == 0 { PauseTimer(T); } else { trap[i] = trap[top]; } return true; } } return false; } }
|
|
|
|