Сейчас 09:10:07 Суббота, 4 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Оптимизация
[Вопрос] Оптимизация
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)


spiteful


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 пахнет :D )


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

AjaccioДата: Понедельник, 12 Сентября 2011, 09:03:44 | Сообщение # 13
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Это ирония на тему оптимизации, очевидно же. buba

XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

Ty3uKДата: Понедельник, 12 Сентября 2011, 09:22:43 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А... Ну сорри, я слегка не понял :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

[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)
---------------------------------------------
Жасс - коробка конфет, Си - карамелька без фантика. Ну и что быстрее съедят?


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Оптимизация
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz