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

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

Закрытая тема
 
Castiel

offline
Опыт: 2,093
Активность:
Замена TriggerRegisterAnyUnitEventBJ
Можно ли заменить

Код:
call TriggerRegisterAnyUnitEventBJ(е,EVENT_PLAYER_UNIT_DEATH)

на
Код:
call TriggerRegisterPlayerUnitEvent(e,Player(GetPlayerId(GetOwningPlayer(GetDyingUnit  ()))),EVENT_PLAYER_UNIT_DEATH,null)
Старый 27.04.2009, 18:11
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Если в другом триггере с событием юнит умирает, то можно, а так-нет
Старый 27.04.2009, 18:12
Castiel

offline
Опыт: 2,093
Активность:
Код:
local integer i
    set i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(e, Player(i), EVENT_PLAYER_UNIT_DEATH, null)
        set i=i+1
        exitwhen i == bj_MAX_PLAYER_SLOTS
    endloop


то есть вот так бедет првильнее ?
Старый 27.04.2009, 18:16
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Код:
local integer i = 0
    loop
        exitwhen i > 12
        call TriggerRegisterPlayerUnitEvent(e, Player(i), EVENT_PLAYER_UNIT_DEATH, null)
        set i=i+1
    endloop


А так еще правильнее
Старый 27.04.2009, 18:18
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Castiel Это всё делается в целях оптимизации, то что ты будешь использовать
Код:
call TriggerRegisterAnyUnitEventBJ(е,EVENT_PLAYER_UNIT_DEATH)
ни к чему страшному не приведет
Старый 27.04.2009, 18:59
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Если говорить о тотальной оптимизации.
Код:
call TriggerRegisterPlayerUnitEvent(e, Player(0), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(1), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(2), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(3), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(4), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(5), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(6), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(7), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(8), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(9), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(10), EVENT_PLAYER_UNIT_DEATH, null)
call TriggerRegisterPlayerUnitEvent(e, Player(11), EVENT_PLAYER_UNIT_DEATH, null)

И не стоит говорить что это глупость. Вызов цикла довольно таки весомая вещь.

Отредактировано MF_Andreich, 28.04.2009 в 06:15.
Старый 28.04.2009, 05:24
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Jass интерпретируемый язык. J, ну будет карта грузиться дольше и всё (это если регистрация идёт не в процессе игры), хотя я использовал бы цикл. В игре я бы делал как MF_Andreich.
Старый 28.04.2009, 06:15
LordSerga

offline
Опыт: 3,809
Активность:
Делай на циклах, будет лучше. Для примера файл в архиве карты war3map.j содержит полную информацию о юнитах, которых ты ставишь на карте, и чем больше юнитов, больше текста в триггерах, тем дольше загрузка карты в варике :)
Старый 28.04.2009, 06:43
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Castiel,
Код:
call TriggerRegisterPlayerUnitEvent(e, Player(GetPlayerId(GetOwningPlayer(GetDyingUnit()))), EVENT_PLAYER_UNIT_DEATH, null)

1. Два ненужных вызова функций Player() и GetPlayerId().
2. Какой толк, чтобы регистрировать события на триггер динамически?
Хмм, мне кажется, что ты создаешь динамический(-ие) триггер(-ы). Если я верно угадал, то рекомендую не использовать их, ибо при удалении (ты же захочешь убрать "ненужные" объекты, верно?) триггеров происходят косяки, если удалять их как другие объекты.
Старый 28.04.2009, 08:13
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Ещё кстати... если у вас в карте играют определённые игроки, то не обязательно делать регистрацию эвентов всех 12))))
Это если карта рассчитана на меньшее количество играющих...
Старый 28.04.2009, 09:51
adic3x

offline
Опыт: 108,439
Активность:
вы оптимизируете не то, что надо...
Старый 28.04.2009, 11:34
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Мне кажется что это экономия на спичках. В лучшем случае вы выиграете минимальное кол-во времени и потеряете в читабельности и гибкости кода.
Старый 28.04.2009, 11:46
J
expert
offline
Опыт: 48,447
Активность:
ShadoW DaemoN, объясни мне смысл слово "оффтоп", и объясни какое он здесь имеет место в моем c MF_Andreich разговоре, в теме, где обсуждается оптимизация, не удаляй посты по теме

не делайте как говорит MF_Andreich, так делают люди которые не понимают что такое оптимизация

Отредактировано J, 28.04.2009 в 18:07.
Старый 28.04.2009, 17:54
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
ADOLF а что тут ещё можно оптимизировать то?)))

или ты конкретно не про эту функцию?)

Ну да... оптимизировать такую мелочь вряд ли надо
Старый 28.04.2009, 18:13
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Жони,
* Во-первых, ты, ничего не зная о человеке, заявляешь что он не знает, что такое оптимизация. Неплохо зная вас обоих, я бы посчитал твои слова троллейбусом.
* Во-вторых, слово "оптимизация" прозвучало впервые в этой теме от тебя, а оптимизация как таковая - здесь очень косвенный вопрос, автор спросил: "можно ли заменить это на то?", а не "что оптимальней - это или то?".
* В-третьих, ты выбрал не ту тему для разглагольствования, я бы посоветовал тебе флудить сюда


ADOLF, кстати, у тебя в статье приведен следующий код:
Код:
function init takes nothing returns nothing
 local trigger t=CreateTrigger()

 call TriggerAddAction(t, function XxX)

 call TriggerRegisterPlayerUnitEvent(t, Player(0x00), EVENT_PLAYER_UNIT_SPELL_CAST, null)
 call TriggerRegisterPlayerUnitEvent(t, Player(0x01), EVENT_PLAYER_UNIT_SPELL_CAST, null)
 call TriggerRegisterPlayerUnitEvent(t, Player(0x02), EVENT_PLAYER_UNIT_SPELL_CAST, null)
 call TriggerRegisterPlayerUnitEvent(t, Player(0x03), EVENT_PLAYER_UNIT_SPELL_CAST, null)
 // --- >
 call TriggerRegisterPlayerUnitEvent(t, Player(0x0f), EVENT_PLAYER_UNIT_SPELL_CAST, null)
endfunction

Считаешь ли ты, что по аналогии регистрацию события смерти юнита нужно делать при инициализации и вышеуказанным способом?
Старый 28.04.2009, 18:55
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
не делайте как говорит MF_Andreich

/*к новичкам это не относится*/ не делайте как вам говорит кто то умный. рано или поздно вы выробатаете свой стиль, свои "ценности" и сможете писать "оптимально" для себя

ADOLF добавил:
Цитата:
(если смотреть на уровне процессора и регистров, то еще и не дергаем стэк лишний раз сохраняяя и вытаскивая на свет божий регистр CX если мне не изменяет память, то именно он отвечает за циклы)
эпик лол) цикл с помощью loop давно не используются, тем более что жасс к этому поняию вообще не применим (там цикле корявее)

ADOLF добавил:
Цитата:
это тебе не асм, здесь инструкции выполняет интерпретатор, алгоритм выполнения кода которого вероятно не имеет ничего схожего с процессором

имеет но незначительно, и не всегда)
Старый 28.04.2009, 19:33
Закрытая тема

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

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

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

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



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