|
|
|
|
Использование только локальных переменных в триг. абилках
|
|
Samedy_ | Дата: Вторник, 11 Августа 2015, 11:27:58 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Решил использовать исключительно локалки в триг. абилах, какие могут быть подводные камни? Есть моменты, когда лучше юзать глобалки, чем локалки?
|
|
|
|
Bibo | Дата: Вторник, 11 Августа 2015, 11:47:27 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Глобальные переменные используются обычно как - Константы: значения, неизменные от начала и до конца игры, как пример - радиус действия заклинания - Временное храниилище: например - создается дамми-юнит, выполняющий роль триггерного снаряда, его нужно забить в переменную, чтобы передавать от вызова к вызову в периодический триггер или таймер, для осуществелния его передвижения
Из подводных камней: - Обнуление: всем локальным переменным, наследникам типа handle необходимо присваивать значение null, по завершению их использования. set v= null Существуют исключения для объектов, которые существуют в течении всей игры, например переменные типа player можно не обнулять. - Циклы: если локальные переменные используются в сочетании с GUI, то важно помнить, что их невозможно будет применять внутри цикла групп юниитов, что располагаются в раздели действий триггеров "Отряд". Это ограничение не распространяется на целочисленные циклы, например, такой как For Each Integer A, Do.
Сообщение отредактировал Bibo - Вторник, 11 Августа 2015, 11:51:24 |
|
|
|
Samedy_ | Дата: Вторник, 11 Августа 2015, 12:02:13 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Спасибо, всегда доходчиво объясняешь.)
Цитата Bibo ( ) - Обнуление: всем локальным переменным, наследникам типа handle необходимо присваивать значение nul В случае пренебрежения этим пунктом, что может случится? Вылеты, лаги, баги со спелами?Добавлено (11 Августа 2015, 12:02:13) --------------------------------------------- И, как считаешь, лучше делать способности, где нужно создавать, там, лишь эффекты в точке, на локалках или на глобалках?
|
|
|
|
Bibo | Дата: Вторник, 11 Августа 2015, 12:26:42 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Цитата Samedy_ ( ) В случае пренебрежения этим пунктом, что может случится? Вылеты, лаги, баги со спелами? Лаги, у всех игроков кроме хоста и потеря fps у игроков со слабым пк. Цитата Samedy_ ( ) И, как считаешь, лучше делать способности, где нужно создавать, там, лишь эффекты в точке, на локалках или на глобалках? Зависит от эффекта. Многие эффекты имеют одну анимацию, их можно создать и сразу уничтожить, в таком случае они ее проиграют и удаляться. Есть эффекты, имеющие несколько анимаиций - birth, stand, death. В случае уничтожения такого эффекта, сразу после его создания, он проиграет только анимацию death. Тогда придется помещать этот эффект в глобальную переменную, чтобы уничтожить только после того, как он проиграет первые две анимации.
Сообщение отредактировал Bibo - Вторник, 11 Августа 2015, 12:28:19 |
|
|
|
Samedy_ | Дата: Вторник, 11 Августа 2015, 12:47:21 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Цитата Bibo ( ) Есть эффекты, имеющие несколько анимаиций - birth, stand, death. В случае уничтожения такого эффекта, сразу после его создания, он проиграет только анимацию death. Тогда придется помещать этот эффект в глобальную переменную, чтобы уничтожить только после того, как он проиграет первые две анимации Как раз ответил мне на следующий вопрос.) А то я уже думал wait юзать. Как всегда, большое спасибо.Добавлено (11 Августа 2015, 12:37:59) --------------------------------------------- Стоп, это получается мне нужно уничтожать эффект только гуишной функцией ? Добавлено (11 Августа 2015, 12:47:21) --------------------------------------------- Не проигрывается без waita
Сообщение отредактировал Samedy_ - Вторник, 11 Августа 2015, 12:33:54 |
|
|
|
Bibo | Дата: Вторник, 11 Августа 2015, 13:11:17 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Разумеется, ведь нужно время, чтобы нужная анимация завершилась, перед тем как уничтожить эффект. Значит нужен либо таймер, либо wait (от которого следует вовсе отказаться). Функция уничтожения эффекта - call DestroyEffect(переменнаяТвойЭффект)
Мой тебе совет, если взялся за Jass, то используй чистый Jass, не смешивай его с GUI. Множество картоделов полегло, споткнувшись об этот камень.
|
|
|
|
Samedy_ | Дата: Вторник, 11 Августа 2015, 14:11:38 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
| Цитата Bibo ( ) либо wait (от которого следует вовсе отказаться). Разве могут возникнуть проблемы, если я указал ожидание 0.00 сек?
Цитата Bibo ( ) Функция уничтожения эффекта - call DestroyEffect(переменнаяТвойЭффект) В курсе, просто подумал что придется юзать bj-функцию. Цитата Bibo ( ) Мой тебе совет, если взялся за Jass, то используй чистый Jass, не смешивай его с GUI. Множество картоделов полегло, споткнувшись об этот камень.
Я бы с удовольствием, но чтобы использовать чистый jass - нужно знать jass => нужно основательно взяться за него и изучить от и до, а мне вот как-то не особо хочется тратить время на что-то пусть не бесполезное, но и не очень-то полезное (хоть у меня его и куча, да). Да и мне не очень удобно использовать просто текст, гораздо проще пока что понимать что я делаю благодаря CS.
|
|
|
|
Bibo | Дата: Вторник, 11 Августа 2015, 14:31:24 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Цитата Bibo ( ) Разве могут возникнуть проблемы, если я указал ожидание 0.00 сек? Wait может работать верно, но в один момент запороть работу триггера. Он ненадежен.
|
|
|
|
|
|
|
|
|
|
|