Зевс
Адская Зверюга
offline
Опыт:
152,154Активность: |
Оптимизация и все что с ней сязано
Решил оптимизировать карту, почитал умную статью Jona, но вопросы остались.
Допустим через мой триггер идет связь с юнитом кастующим заклинание. В действиях я присваиваю ему переменную SPELL_castingmag. Потом после выполнения триггера мне нужно почистить переменную SPELL_castingmag. Чтобы это сделать, мне достаточно (если я не прав - поправьте) в конце триггера влепить следующее действие: Custom script: call RemoveUnit( udg_SPELL_castingmag ) Но как это будет выглядеть для переменных работающих в массиве: SPELL_castingmag[(integer A)] SPELL_castingmag[someVar], где someVar - какая-то целочисленная переменная. SPELL_castingmag[1....12] з.ы: я так понял желательно чистить переменные юнитов, эфектов и булеанов. Целочисленные можно не трогать. |
04.08.2007, 15:45 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
путаешь обнуление переменных с удалением ненужных обьектов.
вообще то я непонял вопрос=/ ADOLF добавил: + кинь кусок кода, так буит легше + едем в жасс раздел. |
04.08.2007, 15:53 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Зевс
Адская Зверюга
offline
Опыт:
152,154Активность: |
Причем тут джасс. Я говорю про действие (CTRL+R) Custom Script через который можно обнулять/удалять не переводя триггер в текст.
Значит Custom script: set SPELL_castingmag = null, так? set SPELL_castingmag[(integer A)] = null Зевс добавил: Проверил - не работает!( |
04.08.2007, 16:20 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Если ты используеш локальные переменные юниты, эффекты...тогда их нужно очищать в конце триггера, но если это глобальные(обычные) и они часто используются, то их очищать не нужно, тк вскоре они опять чем-нибудь заполнятся...а вообще в твоем случае, где нужно удалить объект и обнулить глобалку, нужно использовать:
Код:
как ты и написал... А в массиве тоже самое Код:
Alex_Hell добавил: Цитата:
это у тебя не работает? так ты через цикл прогнал ее? легче создать и цикл и удаление воина на jass'e, а не на триггерах! |
|
04.08.2007, 16:23 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Зевс
Адская Зверюга
offline
Опыт:
152,154Активность: |
Вот оно рабочее Custom script: set udg_SPELL_castingmag = null
Зевс добавил: Alex_Hell опередил меня)) Зевс добавил: call RemoveUnit(udg_SPELL_castingmag) - удалит переменную целиком и безвозвратно, а null - просто ее почистит... вроде разобрались. Теперь хотелось бы узнать кто как чистит точки. Например триггер "телепортировать юнит в точку(позиция другого юнита)" Не задовать же каждую точку через переменную, а потом ее обнулять/удалять. Есть способы попроще? Отредактировано Зевс, 04.08.2007 в 17:17. |
04.08.2007, 16:37 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Когда это он успел? он только 1 пост оставил тут и никакого udg у него нет! Цитата:
Незнаю насчет способа попроще...да и обычный довольно простой...присвоил локалке позицию, куда надо телепортиться, а после телепорта удалил и обнулил локалку...вот и все! Alex_Hell добавил: А как еще можно?! |
||
04.08.2007, 17:01 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Зевс
Адская Зверюга
offline
Опыт:
152,154Активность: |
Это будет типа
local location loc = GetUnitLoc(udg_SPELL_caster) call SetUnitPositionLoc (udg_SPELL_caster, loc) call AddSpecialEffectLocBJ( loc, "Abilities\\Spells\\Items\\AIil\\AIilTarget.mdl" ) call RemoveLocation (loc) set loc = null |
04.08.2007, 17:30 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
Цитата:
ЗЫ Зевс не юзай локации, перемещай юнита и создавай эффекты по X Y |
|
04.08.2007, 17:43 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Цитата:
Че-то я ваще не врубаюсь зачем ты сначала присвоил loc позицию кастера, а потом переместил этого кастера на эту позицию...ничего не произойдет...или ты имееш ввиду, что ты поставиш Код:
тогда будет норм... ну а так все как надо! Alex_Hell добавил: Но я все-таки не врубился зачем тебе передвигать кастера...двигать тут ниче не надо(не даст ничего) Alex_Hell добавил: Спецэффект удалять тоже надо! Код:
|
|
04.08.2007, 18:24 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Цитата:
Не правильно разобрались... РемувЮнит удалит с карты юнита, ссылка на которого идёт через эту переменную. А null - это правильно. Код:
В этом коде какая-то ошибка... Т.е. технически-то всё правильно, но это ничего не даст, ибо юнит останется на месте (переместится на своё же место). |
|
04.08.2007, 19:24 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Зевс
Адская Зверюга
offline
Опыт:
152,154Активность: |
Переменная SPELL_caster тупо для примера. А вобще я уже разобрался с убийственными лагами) |
04.08.2007, 20:20 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
DFlyer,
Код:
А вообще грамотнее будет так: Код:
А вот об'null'ять переменные после удаления объекта, я думаю, не нужно, т.к. какая разница, что осталось в переменной, она всеравно уничтожится по завершении функции, в независимости от ее значения. |
05.08.2007, 15:28 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
YasonDelAlt
Нужно обнулять переменные, которые сразу при инициализации получили значение объекта, который был создан! Код:
|
05.08.2007, 20:59 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
DFlyer, черт, ну почему так? Ведь когда мы создаем объект, мы получаем не сам объект, а ссылку (указатель) на него. Ссылка же является 4-х байтовым числом (unsigned integer или DWORD, кому как больше нравится), адресом во внутреннем менеджере памяти вара. Когда мы удаляем объект, мы опять же передаем _адрес_, а не объект, содержащийся в нашей переменной. Так какая разница, что за адрес лежит в переменной после уничтожения объекта, ей самой не долго жить осталось, зачистку обычно же производят под конец функции. После завершения функции, стековый фрейм уничтожается вмести со всеми локальными переменными, которые в нем содержались.
Так, свою точку зрения я обосновал, теперь попрошу обосновать твою точку зрения (у-у-у-у как сложно выразился =) ). |
06.08.2007, 07:31 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
вообще то насколько я знаю идея, что обнулять локалки надо только если в них заносится только что созданный обьект пошло от жоника (правда он говорил что кешь перед инитом не нужно флушить)... вобщем то как это все сомнительно=/ |
06.08.2007, 12:43 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
YasonDelAlt ты выразился с точки зрения "нормальных" языков программирования, а Jass это только тестовый язык управления игровыми процесами вара, над которым близы не очень сильно работали т.е. он далеко не оптимальный, это значит что далеко не всё работает т.к. работает в С++, Pascal, АСМ и т.д. и т.п. Многие люди тестировали и пришли к выводу что при создании "сложных" обьектов(точки, юниты, декорации...) и прямом присвоении локальной переменной происходит утечка т.е. локальная переменная не уничтожается как положено :\
|
06.08.2007, 15:23 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
YasonDelAlt
offline
Опыт:
862Активность: |
MrSmiLe, это что ж получается, если локальная переменная указывает на что-то (пусть даже на мусор), то при выходе из функции она остается висеть в памяти?!!
Т. е. такая конструкция: Код:
|
06.08.2007, 17:02 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exAres
I love magic :)
offline
Опыт:
7,788Активность: |
YasonDelAlt нет, только в том случае если обьект создаётся внутри функции.
|
06.08.2007, 18:52 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
43,079Активность: |
Код:
Будет утечка, если link - является созданным объектом К примеру: Код:
А вот тут: Код:
|
06.08.2007, 20:24 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
Никто так и не сказал полностью правельно) Отредактировано Jon, 06.08.2007 в 21:16. |
06.08.2007, 20:39 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|