Сейчас 18:44:22 Вторник, 23 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Помогите с утечками (Мне нужна информация про все утечки)
[Вопрос] Помогите с утечками
GoJustGoДата: Вторник, 18 Декабря 2012, 20:35:20 | Сообщение # 1
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
Я делаю карту и в ней у меня есть такая вот функция.Из за нее ужасно лагает.
Здесь подсвечиваются красным цветом 4 утекающие локальные переменные.
DistanceBetweenPoints
IsUnitAliveBJ
MoveLightningLoc
TriggerRegisterTimerEventPeriodic
1)как устранить эти 4 утечки?
2)есть ли какие либо статьи про такие утечки? сколько ни смотрел статей ничего не нашел.
3)кто может научить делать jass коды без утечек?скайп мб дать.или тут объяснить все случаи.

function Trig_oblas_kykl_4_Func002Func004C takes nothing returns boolean
if ( not ( DistanceBetweenPoints(GetUnitLoc(udg_POSL_UNIT[300]), GetUnitLoc(udg_POSL_UNIT[324])) >= 1500.00 ) ) then
return false
endif
return true
endfunction

function Trig_oblas_kykl_4_Func002C takes nothing returns boolean
if ( not ( IsUnitAliveBJ(udg_POSL_UNIT[324]) == true ) ) then
return false
endif
return true
endfunction

function Trig_oblas_kykl_4_Actions takes nothing returns nothing
if ( Trig_oblas_kykl_4_Func002C() ) then
call MoveLightningLoc( udg_Molniya[5], GetUnitLoc(udg_POSL_UNIT[300]), GetUnitLoc(udg_POSL_UNIT[324]) )
if ( Trig_oblas_kykl_4_Func002Func004C() ) then
call SetUnitPositionLoc( udg_POSL_UNIT[324], GetUnitLoc(udg_POSL_UNIT[300]) )
else
endif
else
call DestroyLightning( udg_Molniya[5] )
set udg_Molniya[5] = null
endif
endfunction

//===========================================================================
function InitTrig_oblas_kykl_4 takes nothing returns nothing
set gg_trg_oblas_kykl_4 = CreateTrigger( )
call DisableTrigger( gg_trg_oblas_kykl_4 )
call TriggerRegisterTimerEventPeriodic( gg_trg_oblas_kykl_4, 0.05 )
call TriggerAddAction( gg_trg_oblas_kykl_4, function Trig_oblas_kykl_4_Actions )
endfunction
 

[SeKtOR]Дата: Вторник, 18 Декабря 2012, 20:58:45 | Сообщение # 2
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Code

function DistanceBetweenCoords takes real x1, real y1, real x2, real y2 returns real     
     return SquareRoot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))        
endfunction

function MovementLightning takes nothing returns nothing     
local real x = GetUnitX(udg_POSL_UNIT[300])
local real y = GetUnitY(udg_POSL_UNIT[300])
local real x1 = GetUnitX(udg_POSL_UNIT[324])
local real y1 = GetUnitY(udg_POSL_UNIT[324])
if (GetWidgetLife(udg_POSL_UNIT[324]) > .405) then     
call MoveLightning(udg_Molniya[5], x, y, x1, y1)     
if(DistanceBetweenCoords(x, y, x1, y1) >= 1500.) then
call SetUnitPosition(udg_POSL_UNIT[324], x, y)     
endif
endif
call DestroyLightning(udg_Molniya[5])     
set udg_Molniya[5] = null     
endfunction     

//===========================================================================     
function InitTrig_oblas_kykl_4 takes nothing returns nothing     
call TimerStart(CreateTimer(), .05, true, function MovementLightning)
endfunction     

Так не будет(возможны ошибки писал в notepad trollface ). Лагает потому что у тебя BJ функции и таймер, который создает 5 утечных точек каждые 0.05 сек(потому что ты их не удаляеш, лучше использовать координаты). Код конешно оставляет желать лучшего.
Quote (GoJustGo)
Здесь подсвечиваются красным цветом 4 утекающие локальные переменные.
DistanceBetweenPoints
IsUnitAliveBJ
MoveLightningLoc
TriggerRegisterTimerEventPeriodic

Это не утекающие переменные, а BJ функции




Сообщение отредактировал [SeKtOR] - Вторник, 18 Декабря 2012, 21:00:50
 

Ty3uKДата: Вторник, 18 Декабря 2012, 21:23:07 | Сообщение # 3
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
[SeKtOR], и не лень же D:

Добавлено (18 Декабря 2012, 21:22:25)
---------------------------------------------
А, там же кода на пару-тройку строчек :D

Добавлено (18 Декабря 2012, 21:23:07)
---------------------------------------------

Quote (|SeKtOR|)
GetUnitX

Quote (|SeKtOR|)
GetUnitY

fie


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

GoJustGoДата: Вторник, 18 Декабря 2012, 21:23:54 | Сообщение # 4
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
[SeKtOR], Вроде че-то понял из твоего ответа)))Спс тебе огромное.А ты мог бы написать маленькую статейку с образцом устранения утечек вот таких как тут. Ща я это кинул в триггер,а в голове то 0(. Прошу :'(
 

Ty3uKДата: Вторник, 18 Декабря 2012, 21:25:08 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ну и таймер не уничтожил. Перепишу-ка я в Notepad++ :3
Code
function DistanceBetweenCoords takes real x1, real y1, real x2, real y2 returns real      
      return SquareRoot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))         
endfunction  

function MovementLightning takes nothing returns nothing      
     local real x = GetWidgetX(udg_POSL_UNIT[300])  
     local real y = GetWidgetY(udg_POSL_UNIT[300])  
     local real x1 = GetWidgetX(udg_POSL_UNIT[324])  
     local real y1 = GetWidgetY(udg_POSL_UNIT[324])  
     if (GetWidgetLife(udg_POSL_UNIT[324]) > .405) then      
         call MoveLightning(udg_Molniya[5], x, y, x1, y1)
          
         if(DistanceBetweenCoords(x, y, x1, y1) >= 1500.) then
             call SetUnitPosition(udg_POSL_UNIT[324], x, y)
         endif
     endif
     call DestroyLightning(udg_Molniya[5])
     call DestroyTimer(GetExpiredTimer())
     set udg_Molniya[5] = null      
endfunction      

//========================================================================   
function InitTrig_oblas_kykl_4 takes nothing returns nothing      
     call TimerStart(CreateTimer(), .05, true, function MovementLightning)  
endfunction


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


Сообщение отредактировал Ty3uK - Вторник, 18 Декабря 2012, 21:28:39
 

GoJustGoДата: Вторник, 18 Декабря 2012, 21:38:33 | Сообщение # 6
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
[SeKtOR], Ty3uK, спс
Если не в напряг:Вот я бы хотел увидеть как убрать все эти 4 утечки с последовательным объяснением.
 

Ty3uKДата: Вторник, 18 Декабря 2012, 21:51:25 | Сообщение # 7
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Красным цветом подсвечиваются не утечки

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

GoJustGoДата: Вторник, 18 Декабря 2012, 22:03:38 | Сообщение # 8
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
я скопировал код и вставил,а игра не запускается. :(
 

Ty3uKДата: Вторник, 18 Декабря 2012, 22:07:36 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Что пишет?
Сохрани два раза через Ctrl+S, потом запусти


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

GoJustGoДата: Вторник, 18 Декабря 2012, 22:32:28 | Сообщение # 10
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
Ty3uK, Ура заработало) ты прям волшебник)

Добавлено (18 Декабря 2012, 22:32:28)
---------------------------------------------
Хотя нет показалось) это я триггер выключил)Со включенным не запускает.Ничего не пишет при запуске,просто запускает варкрафт а не карту.

 

Ty3uKДата: Вторник, 18 Декабря 2012, 22:45:01 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Сохранил два раза?

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

GoJustGoДата: Вторник, 18 Декабря 2012, 23:18:50 | Сообщение # 12
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
да два раза.смотри а этот триггер относится к другому триггеру мб в нем надо тоже что-то поменять чтобы они состыковались теперь.

Добавлено (18 Декабря 2012, 23:18:50)
---------------------------------------------
а может быть тут переменные глобальные нужны новые теперь?

 

Ty3uKДата: Вторник, 18 Декабря 2012, 23:23:44 | Сообщение # 13
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
нет, не нужны.
хм, это странно. а если сохранить через обычный редактор?


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

[SeKtOR]Дата: Среда, 19 Декабря 2012, 16:50:45 | Сообщение # 14
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Тык, что быстрее GetWidgetX/Y или GetUnitX/Y ? Тут был целый холивар по поводу скорости, где нашего известного сера обозвали диким нубом trollface

Добавлено (19 Декабря 2012, 16:50:45)
---------------------------------------------

Quote (GoJustGo)
Если не в напряг:Вот я бы хотел увидеть как убрать все эти 4 утечки с последовательным объяснением.

Почитай, возможно поймеш основы


 

Ty3uKДата: Среда, 19 Декабря 2012, 18:51:35 | Сообщение # 15
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
[SeKtOR], как по мне, все очень просто - юнит наследуется от widget, он в свою очередь от agent, а тот от handle.
Ты вызываешь родительский метод, а не его собственный, то есть, если представить иерархию, он находится выше, чем GetUnitX/Y.
Quote (|SeKtOR|)
нашего известного сера

Это ж где у нас такое было? Помню, что было, но не помню когда и где.


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

GoJustGoДата: Среда, 19 Декабря 2012, 23:35:34 | Сообщение # 16
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
ну там как обнулять уже установленные функции,а меня интересуют только локальные функции.

DistanceBetweenPoints надо заменить не точками,а координатами. вроде это я понял как.

а остальные 3 функции как решить? просто объясните:
Что вы делаете для замены данной функции?(просто на словах,а не кодом уже сделанным)

Я понял что вы их заменяете на те которые не создают новые спецэффекты,юниты,регионы,точки.
Но суть в том что я не понял - как именно это вы делаете.
Я не понял откуда вы узнали,например, что надо заменить IsUnitAliveBJ именно на вашу переменную,а не на IsUnit(ведь тут нету уже BJ). Где можно узнать про эти законы замены)
 

Ty3uKДата: Четверг, 20 Декабря 2012, 00:07:15 | Сообщение # 17
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Опыт... trollface
Серьезно. Приходит со временем иипри общении с умными людьми, которые разбираются в нюансах работы движка игры (это я насчет проверки жив ли юнит).


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

[SeKtOR]Дата: Четверг, 20 Декабря 2012, 14:34:38 | Сообщение # 18
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Если хочеш раскрыть BJ функции, наведи на неё мышку нажми ctrl+лкм(левая кнопка мыши) и смотри начинку

 

GoJustGoДата: Понедельник, 24 Декабря 2012, 23:11:24 | Сообщение # 19
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
Прошу сделайте этот триггер в примере-карте чтобы от героя к призванной кукле шла нить.ОченьОчень прошу!

Добавлено (24 Декабря 2012, 23:11:24)
---------------------------------------------
Сделает кто или нет?

 

ExtrematorДата: Понедельник, 24 Декабря 2012, 23:21:03 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Суть то в чём? создаётся юнит и он соединён с хозяином молнией?
 

GoJustGoДата: Вторник, 25 Декабря 2012, 00:18:25 | Сообщение # 21
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
Extremator,
Суть:Канкуро призвал куклу,триггерно, и соединил эффектом молнии,который каждые 0.05 при проверке что канкуро жив перемешается за куклой,а иначе удаляется она и удаляется из памяти.Надо так сделать без утечек.
 

ExtrematorДата: Вторник, 25 Декабря 2012, 03:09:37 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
лучше всего для плавности - таймер с 0.03 сек, чуть хуже - 0.04 сек
лично я бы 0.05 не стал бы использовать, ибо резко для меня... хотя...

в общем, каждый раз создаёшь 2 точки
set point[1] = позиция твоего героя
set point[2] = позиция твоей куклы


потом двигаешь молнию
Молния - Move ( молния, point[1], point[2] )

далее удаляешь точки
call DestroyLocation(point[1])
call DestroyLocation(point[2])


вроде так...
 

[SeKtOR]Дата: Вторник, 25 Декабря 2012, 15:02:43 | Сообщение # 23
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Вообще тут надо писать о помощи со спелом :3
Цитата (Extremator)
далее удаляешь точки
call DestroyLocation(point[1])
call DestroyLocation(point[2])

function не фаунд, существует только RemoveLocation


 

SirNikolasДата: Вторник, 25 Декабря 2012, 20:40:41 | Сообщение # 24
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (|SeKtOR|)
Тык что быстрее - GetWidgetX/Y или GetUnitX/Y?
Если в JASS наследование реализовано через vtable, то одинаково. В любом случае, советую прочитать эту статью, лишним не будет.
Extremator, зачем точки? Можно же напрямую с координатами работать.
А .04 - .05 вполне достаточно, на мой взгляд.


 

GoJustGoДата: Вторник, 05 Марта 2013, 13:58:27 | Сообщение # 25
4 уровень
Группа: Пользователи
Сообщений: 87
Награды: 0
Репутация: 12
Блокировки:
ребят ну мб все таки кто-нибудь попробует сделать нити?
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Помогите с утечками (Мне нужна информация про все утечки)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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