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

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

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

offline
Опыт: 2,633
Активность:
оптимален ли код
наконец-то я выучил vjass и хочу предоставить мою первую наработку, хочу узнать есть ли какие-нибудь ошибки, что можно исправить и т.п.


Отредактировано LostCoast, 21.09.2011 в 17:47.
Старый 19.09.2011, 21:35
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
LostCoast, вместо скопа юзай либу и все будет круто +)
Старый 19.09.2011, 21:51
LostCoast

offline
Опыт: 2,633
Активность:
alexprey, если я использую либу то функции типа ReleaseTimer, GetTimerData, SetTimerData не работают

Faion, ну допустим ты стреляешь по врагу стоящему через пропасть и в яме есть враги, если не будет солизии то снаряд будет врезаться в тех кто внизу,недолетая до нужных
Старый 19.09.2011, 22:06
Elf_Stratigo

offline
Опыт: 4,699
Активность:
есть подозрение, что некоторые поля должны быть статическими
при быстром просмотре нашёл одну утечку в Con(), очень критичную
Старый 19.09.2011, 22:20
LostCoast

offline
Опыт: 2,633
Активность:
Elf_Stratigo, а поконкретней?
Старый 19.09.2011, 22:23
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Для любого заклинания выполняется:
local Option o = Option.create()
Если заклинание не обрабатывается этой системой, структура не будет уничтожена.
Поведение всех таймеров одинаково для всех структур (период, функция). Будет правильным выделить это поведение относительно всех структур и иметь всего один объект. Конечно для этого придётся преобразовать код.
Может поведение и других частей структуры не зависит от её состояния, не вчитывался.
Старый 19.09.2011, 22:31
LostCoast

offline
Опыт: 2,633
Активность:
Elf_Stratigo , так у меня вроде обрабатывается, че-то я никак вникнуть не могу...

Отредактировано LostCoast, 20.09.2011 в 01:53.
Старый 20.09.2011, 00:01
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Представь, что было событие EVENT_PLAYER_UNIT_SPELL_EFFECT с кодом заклинания 'AAAA'
Тогда ни в один if не попадёшь, а по завершению функции Con() у экземпляра Option o не будет вызван деструктор
Старый 20.09.2011, 11:27
LostCoast

offline
Опыт: 2,633
Активность:
Elf_Stratigo, я себя таким нубом чувствую когда читаю твои посты. Но навело меня на мысль и так, если я правильно понял, то при каждом произнесении любого спелла у меня создается структура Option и ничего не делает

такой код будет правильным?

Код:
private function Con takes nothing returns boolean
    local trigger shot
    local Option o 
        if  GetSpellAbilityId() == 'A000'  then
            set o = Option.create()
            set MAX_BULLET = 1
            set SCATTER = 0.05
            set o.ol = GetSpellTargetLoc()
            set o.ou = GetTriggerUnit()
            set o.ot = NewTimer()
            call SetTimerData(o.ot, integer(o))
            call TimerStart(o.ot,.05,true,function CreateBullet)
        elseif GetSpellAbilityId() == 'A001'  then
            set o = Option.create()
            set MAX_BULLET = 3
            set SCATTER = 0.10
            set o.ol = GetSpellTargetLoc()
            set o.ou = GetTriggerUnit()
            set o.ot = NewTimer()
            call SetTimerData(o.ot, integer(o))
            call TimerStart(o.ot,.05,true,function CreateBullet)
        elseif GetSpellAbilityId() == 'A004'  then
        set o = Option.create()
            set shot  = CreateTrigger()
            call TriggerRegisterAnyUnitEventBJ(shot, EVENT_PLAYER_UNIT_SPELL_ENDCAST)
            call TriggerAddCondition(shot,  Condition(function onDeath))
            set MAX_BULLET = 50
            set SCATTER = 0.12
            set o.ol = GetSpellTargetLoc()
            set o.ou = GetTriggerUnit()
            set o.ot = NewTimer()
            call SetTimerData(o.ot, integer(o))
            call TimerStart(o.ot,.05,true,function CreateBullet)
            set shot = null   
        endif
        return false
endfunction
Старый 20.09.2011, 12:14
Elf_Stratigo

offline
Опыт: 4,699
Активность:
да
заметь, удобно иметь некую БД где можно было бы установить соответствие между заклинанием и значениями для структуры
тогда добавление нового типа снарядов можно было бы организовать в одну строчку, а сложность выбора нужных данных в функции Con() для структуры была бы О(1)
Старый 20.09.2011, 14:11
LostCoast

offline
Опыт: 2,633
Активность:
тоесть сделать из Con стандартную

function влалал returns boolean
return заклинание
endfunction

а все перерасчеты в функции action, ну в принципе буду дорабатывать свою систему пока как раз пытаюсь её оптимизировать на сколько можно.
Старый 20.09.2011, 14:22
DioD

offline
Опыт: 45,134
Активность:
для любителей байтосчитания можно оптимизировать ряд объектов, например точки, не создавать их, а двигать на нужные корды, получать Z и отпускать.

не использовать структуры и кастом объекты там где нет явной необходимости.

все патроны можно двигать одним единственным таймером который не создаётся и не удаляется.
Старый 20.09.2011, 18:21
LostCoast

offline
Опыт: 2,633
Активность:
Цитата:
Сообщение от DioD
для любителей байтосчитания можно оптимизировать ряд объектов, например точки, не создавать их, а двигать на нужные корды, получать Z и отпускать.

например MoveLocation(X,Y) ?


Цитата:
Сообщение от DioD
все патроны можно двигать одним единственным таймером который не создаётся и не удаляется.

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

Цитата:
Сообщение от DioD
не использовать структуры и кастом объекты там где нет явной необходимости.

дня 4 назад я вообще не знал как писать на vjass этот код является в принципе моим первым творением, и вроде бы он неплохо написан.
Старый 20.09.2011, 19:28
LostCoast

offline
Опыт: 2,633
Активность:
я думаю тему можно закрыть, всем спасибо за советы.
Старый 21.09.2011, 17:47
Закрытая тема

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

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

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

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



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