|
|
|
|
[Вопрос] Оптимизация
|
|
wetalq | Дата: Воскресенье, 11 Сентября 2011, 15:58:12 | Сообщение # 1 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| Code function Shunpo_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function Shunpo_Loop takes nothing returns nothing local timer t = GetExpiredTimer () local unit UnitCaster = LoadUnitHandle(udg_Hash,GetHandleId(t),1) local real Angle = LoadReal(udg_Hash,GetHandleId(t),2) local real Speed = LoadReal(udg_Hash,GetHandleId(t),3) local real Root = LoadReal(udg_Hash,GetHandleId(t),4) local real Range = LoadReal(udg_Hash,GetHandleId(t),5) local real x1 local real y1 local real x3 local real y3 set x1 = GetUnitX(UnitCaster) set y1 = GetUnitY(UnitCaster) set x3 = (x1 + Speed * Cos(Angle)) set y3 = (y1 + Speed * Sin(Angle)) call SetUnitPosition(UnitCaster,x3,y3) set Range = Range + Speed call SaveReal(udg_Hash,GetHandleId(t),5,Range) set t = null if Root <= Range then call DestroyTimer(GetExpiredTimer()) call PauseUnit(UnitCaster, FALSE) call SetUnitVertexColor(UnitCaster,255,255,255,255) call SetUnitPathing(UnitCaster,true) endif set t = null set UnitCaster = null endfunction
function Shunpo_Actions takes nothing returns nothing local unit UnitCaster = GetSpellAbilityUnit() local real x1 = GetUnitX(UnitCaster) local real y1 = GetUnitY(UnitCaster) local real x2 = GetLocationX(GetSpellTargetLoc()) local real y2 = GetLocationY(GetSpellTargetLoc()) local real Angle = Atan2(y2 - y1, x2 - x1) local real Speed = 30 local real Root = SquareRoot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)) local real Range = 0 local real Interval = 0.005 local timer t = CreateTimer () call PauseUnit(UnitCaster, true) call SetUnitVertexColor(UnitCaster,25,25,25,75) call SetUnitPathing(UnitCaster,false) call SaveUnitHandle(udg_Hash,GetHandleId(t),1,UnitCaster) call SaveReal(udg_Hash,GetHandleId(t),2,Angle) call SaveReal(udg_Hash,GetHandleId(t),3,Speed) call SaveReal(udg_Hash,GetHandleId(t),4,Root) call SaveReal(udg_Hash,GetHandleId(t),5,Range) call TimerStart(t,Interval,true,function Shunpo_Loop) set t = null set UnitCaster = null endfunction
function InitTrig_Shunpo takes nothing returns nothing local trigger t = CreateTrigger( ) local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(t, Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) set i = i + 1 exitwhen i == 16 endloop call TriggerAddCondition( t, Condition( function Shunpo_Conditions ) ) call TriggerAddAction( t, function Shunpo_Actions ) set t = null endfunction
вот собственно мой первый спелл на Jass, хотелось бы узнать что в нем можно еще оптимизировать.
|
|
|
|
Faion | Дата: Воскресенье, 11 Сентября 2011, 16:22:53 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Написать API для мувинга без использования ХТ. =))
А так норм=)
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
lawson | Дата: Воскресенье, 11 Сентября 2011, 17:01:24 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Опять раскрыли TriggerRegisterBJ пфф зачем!? Quote (wetalq) вот собственно мой первый спелл Это спелл? помоему системка на перемещение. Сам писал с нуля?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
wetalq | Дата: Воскресенье, 11 Сентября 2011, 17:53:11 | Сообщение # 4 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| Quote (lawson) Опять раскрыли TriggerRegisterBJ пфф зачем!?
а что не надо раскрывать ?
Quote (lawson) Это спелл? помоему системка на перемещение. Сам писал с нуля?
писал сам с нуля
|
|
|
|
lawson | Дата: Воскресенье, 11 Сентября 2011, 22:17:12 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (wetalq) а что не надо раскрывать ? Я спрашивал зачем, зачем ее раскрывать. чем тебе этот БЖ не понравился?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 11 Сентября 2011, 22:19:00 |
|
|
|
wetalq | Дата: Воскресенье, 11 Сентября 2011, 22:20:33 | Сообщение # 6 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| lawson, насколько я знаю не вызывают утечки bj_ а что плохого при её раскрытии ?
|
|
|
|
lawson | Дата: Воскресенье, 11 Сентября 2011, 22:41:25 | Сообщение # 7 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (wetalq) насколько я знаю не вызывают утечки bj_ а что плохого при её раскрытии ? статические bj_ не вызывают. Ладно не забивай в голову потом поймешь.
Добавлено (11 Сентябрь 2011, 22:41:25) --------------------------------------------- Quote (wetalq) вот собственно мой первый спелл на Jass Quote (wetalq) писал сам с нуля Ну для первого слишком хорошо. Ты раскрываешь не нуждающийся в этом БЖ, пишешь системку на перемещение при это задаешь дуратский вопрос что еще можно оптимизировать.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 11 Сентября 2011, 22:43:09 |
|
|
|
Faion | Дата: Воскресенье, 11 Сентября 2011, 23:27:15 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (lawson) Ты раскрываешь не нуждающийся в этом БЖ
Лол? Лишний вызов как минимум, все правильно он сделал.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
Ajaccio | Дата: Воскресенье, 11 Сентября 2011, 23:38:12 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Code call TriggerRegisterPlayerUnitEvent(t, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(2), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(3), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(4), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(5), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(6), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(7), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(8), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(9), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(11), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(12), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(13), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(14), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) call TriggerRegisterPlayerUnitEvent(t, Player(15), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
lawson | Дата: Воскресенье, 11 Сентября 2011, 23:52:09 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Faion, да то что правильно я и не спорю, но вот он знает зачем это сделал, я тоже у Dreii спрашивал зачем раскрывать TriggerRegisterBJ он сказал что не знает но делает это как и все!? Ajaccio, вообще решил проблему четко! По мне так нихрена не логично ракрывать этот БЖ. А тот кто это делает ни разу не задумывался над этим.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 11 Сентября 2011, 23:55:06 |
|
|
|
Ajaccio | Дата: Понедельник, 12 Сентября 2011, 00:49:06 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Да, по сути, никакой разницы, можно как угодно делать, пара КБ памяти делу не помогут.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Ty3uK | Дата: Понедельник, 12 Сентября 2011, 08:59:23 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ajaccio, что за убогое раскрытие? Наф столько эвентов? Если уже и раскрыл, то через проверку статуса слота игрока и луп- так короче и проще, не?
Добавлено (12 Сентябрь 2011, 08:59:23) --------------------------------------------- Ну собственно, как автор и сделал (только конструкция jngp пахнет )
|
|
|
|
Ajaccio | Дата: Понедельник, 12 Сентября 2011, 09:03:44 | Сообщение # 13 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Это ирония на тему оптимизации, очевидно же.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
Ty3uK | Дата: Понедельник, 12 Сентября 2011, 09:22:43 | Сообщение # 14 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| А... Ну сорри, я слегка не понял
|
|
|
|
[DS] | Дата: Понедельник, 12 Сентября 2011, 12:17:43 | Сообщение # 15 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| call PauseTimer(t) call DestroyTimer(t)
|
|
|
|
wetalq | Дата: Понедельник, 12 Сентября 2011, 12:52:08 | Сообщение # 16 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| [DS], перед уничтожениям таймера его обязательно нужно остановить ?
|
|
|
|
[DS] | Дата: Понедельник, 12 Сентября 2011, 12:56:14 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| да
|
|
|
|
FkoFF | Дата: Понедельник, 12 Сентября 2011, 13:53:58 | Сообщение # 18 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Faion) Лол? Лишний вызов как минимум, все правильно он сделал. в ущерб весу карты и громоздкости кода. Нет смысла в этом..
|
|
|
|
Faion | Дата: Понедельник, 12 Сентября 2011, 17:49:43 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (FkoFF) в ущерб весу карты и громоздкости кода.
О да, на целых пару бит! повысится вес мапы.
Го го го экономить на пробелах ._. А так же юзать функции обретки с короткими названиями.
Бтв, для пряморукого жассера нет такого понятия как "громоздкость" кода, ибо все отцы юзают методы функционального программирования и стандартные функции jass почти не присутствуют в коде т.к. все они забиты в либы в которых тонны пользовательских АПИ.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
FkoFF | Дата: Вторник, 13 Сентября 2011, 15:32:32 | Сообщение # 20 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Faion) О да, на целых пару бит! повысится вес мапы. То что запускается 1 раз при инициализации карты и не вызывает ровным счетом ни одной утечки - точно не требует развертки. Наоборот, развертка вредна ибо "ширина" потоков увеличится на несколько бит из-за разворачивания )
|
|
|
|
Faion | Дата: Вторник, 13 Сентября 2011, 15:57:52 | Сообщение # 21 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (FkoFF) То что запускается 1 раз при инициализации карты и не вызывает ровным счетом ни одной утечки - точно не требует развертки.
Про утечки ничего не говорилось, более того функции обертки не инициализируются при инициализации, офк если у них нету самоинициализации как у некоторых.
Quote (FkoFF) Наоборот, развертка вредна ибо "ширина" потоков увеличится на несколько бит из-за разворачивания
Ширина потока как раз таки будет уменьшена, или вы думаете если функция обернута, то содержание не помещается в поток?))
Да и поток, имеет не "ширину", а длину, длинна измеряется в тактах. И как раз длина потока будет увеличена ровно на ссылку.
Бтв, если вы такой фан оптимизации, то постарайтесь давать короткие имена функция и переменным, ибо это так же влияет на длину потока, и на скорость обработки соответственно.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
Сообщение отредактировал Faion - Вторник, 13 Сентября 2011, 15:58:07 |
|
|
|
FkoFF | Дата: Вторник, 13 Сентября 2011, 16:16:12 | Сообщение # 22 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Faion) Ширина потока как раз таки будет уменьшена, или вы думаете если функция обернута, то содержание не помещается в поток?)) в отдельный поток, а не в текущий, и вес потока напрямую зависит от количества выполняемых в нем действий, чем больше - тем "тяжелее" поток, притом прогрессия отнюдь не последовательная.
Под шириной я подразумеваю именно вес потока в памяти а не его тактовую длину) Что не одно и тоже )
Quote (Faion) Бтв, если вы такой фан оптимизации, то постарайтесь давать короткие имена функция и переменным, ибо это так же влияет на длину потока, и на скорость обработки соответственно. я как раз таки не фан абсолютно бестолкового раскрытия бж.
|
|
|
|
Faion | Дата: Вторник, 13 Сентября 2011, 17:21:00 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
| Quote (FkoFF) в отдельный поток, а не в текущий, и вес потока напрямую зависит от количества выполняемых в нем действий, чем больше - тем "тяжелее" поток, притом прогрессия отнюдь не последовательная. Открою тайну, выполняется все в 1 потоке, если не создавать отдельный поток. В случае использования этих БЖ не создается отдельный поток ._. Quote (FkoFF) вес потока напрямую зависит от количества выполняемых в нем действий Поток не имеет веса, это лишь набор инструкций для процессора ._. Длинна потока устанавливается платформой. Quote (FkoFF) я как раз таки не фан абсолютно бестолкового раскрытия бж. Ок, приведу пример на уровне детского сада. Бж == конфета в фантике, раскрытая функция == конфета без фантика. Вопрос, что быстрее попадет в рот и будет съедено?
Учитывая что профи пишут всегда свое ядро, они не будут использовать функции обертки, от того что 1 раз будет раскрыта функция никто не умрет. Более того, обертывать инструкции бесконечно нельзя на платформе вар3. Т.е. в сложных системах использование БЖ может привести к багам, которые будет крайне сложно обнаружить, именно по этой причине опытные жассеры крайне редко используют бж.
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
|
|
|
|
FkoFF | Дата: Вторник, 13 Сентября 2011, 21:01:18 | Сообщение # 24 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Faion) Поток не имеет веса, это лишь набор инструкций для процессора ._. Длинна потока устанавливается платформой. что то кто-то палится.. учитывая что под функцию выделяется оперативная память. -_-
Quote (Faion) именно по этой причине опытные жассеры крайне редко используют бж. И ты, конечно, себя к ним причисляешь. Однако я не о том, что бы задеть твое самолюбие, а о рациональности, учитывая что на самом деле раскрывать просто не имеет смысла ибо это приведет лишь к более медленной загрузке карты.
Так вот теперь вопрос - на кой хрен? )
Смысл хоть какой то был бы, если бы автор использовал Player - переменную ,а не функцию, тогда при большом количестве сказывалось бы ускорение, но этого не будет, он просто CnP из бж, собственно, функцию.
|
|
|
|
[DUОS] | Дата: Вторник, 13 Сентября 2011, 21:09:32 | Сообщение # 25 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Бестолковое раскрытие БЖ? Штоещозалолтакое... Раскрывая BJ, ты режешь лишние вызовы функций.Добавлено (13 Сентябрь 2011, 21:07:44) --------------------------------------------- Offtop: зааськайся наконец) Добавлено (13 Сентябрь 2011, 21:08:40) ---------------------------------------------
Quote (Faion) Вопрос, что быстрее попадет в рот и будет съедено? None of the above ;]Добавлено (13 Сентябрь 2011, 21:09:32) --------------------------------------------- Жасс - коробка конфет, Си - карамелька без фантика. Ну и что быстрее съедят?
|
|
|
|
|
|
|
|
|
|
|