Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Вызывает ли это утечки?
Каждые две секунды происходит триггер в котором есть такое действие:
Set Random Point = (Random point in ( Region Centered at( Position of Marine[Playernumber...bla.bla)) with size (4000,4000)
Но меня волнует ещё - Region Centered at (...) size (....,...)
Этот триггер у меня происходит каждые 2 секунды... и получается что каждые 2 секунды в памяти создаётся заново этот регион.
Естественно в конце этого триггера стоит.
call RemoveLocation(udg_RandomPoint) - Но ведь ещё же тут используется Region Centered At... Так вот мне интересно... его надо как-то удалять.... чтобы он не вызывал утечек?
Можно создать новую переменную региона(Rect), но какой коммандой удаляется регион? Отредактировано Ranger21, 12.01.2009 в 18:35. |
12.01.2009, 18:07 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Gres
Кораэлестраз
offline
Опыт:
18,575Активность: |
Помойму регион нужно не обнулять, а удалять! Действием: call RemoveLocation(твоя локация)
|
12.01.2009, 18:32 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
StMechanus
Дух сети
offline
Опыт:
11,608Активность: |
Я так понял регион у тебя это переменная, насколько я помню? - Если да то создай пустой триггер с действием CS g (например), выключи и включи триггер - должно выдать ошибку, в самому верху есть пункт Global Variables. Поищи там свою переменню - справа будет написано 0 или null. Потом в своем триггере напиши CS set udg_твоя переменная = null |
12.01.2009, 18:33 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Gres То есть у региона и у точки одна и таже комманда удаления?)
Там есть переменная Rect, Я имел ввиду не обнуление... а удаление).... я его локалкой делать врятли буду Вот если перевести триггер в текст то выглядит так: Код:
Всё работает отлично... ток я вот думаю утечки тут точно есть |
12.01.2009, 18:34 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
StMechanus
Дух сети
offline
Опыт:
11,608Активность: |
Вроде утечек не должно быть - команда "очищения" точки есть) |
12.01.2009, 18:37 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Djok У меня периодически присваивается рандомная точка в рандомном регионе...
Точка находиться в переменной... а регион этот - нет. Наверно надо сделать регион переменной и потом его удалять? |
12.01.2009, 18:38 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
StMechanus
Дух сети
offline
Опыт:
11,608Активность: |
нет не надо - у тебя все нормально, утечек быть не должно
Djok добавил: ты же не создаешь каждые 2 сек регион) |
12.01.2009, 18:42 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Код:
Random Point in - создаёт точку Region Centered at - создаёт регион Position of - создаёт точку Создаётся три объекта. Если их больше нигде не используешь, их надо удалять. |
12.01.2009, 18:43 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Djok
Как раз каждые 2 сек и выходит... он же рандомно каждые 2 сек создаётся. Пока не накопиться 100 юнитов...) DFlyer Уууу... даже три утечки выходит) щас тогда всё это в переменные занесу. А можно ли код на джассе пооптимизированее написать? Обычный триггерный код я выше написал... PS: использую их только в этом тригере |
12.01.2009, 18:46 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Ranger21
Что такое Код:
? Что вообще должен делать триггер? Вот, исправил чуток. Сделал без всяких лишних локаций. » OptimizedCode Код:
Отредактировано DFlyer, 12.01.2009 в 19:54. |
12.01.2009, 19:48 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Harakternyk
offline
Опыт:
2,703Активность: |
По обсуждаемому и в общем хочу лишь заметить, что именно функции типа Remove и выводят ненужный более объект из игры - обнулeние переменных имеет смысл лишь тогда, когда с их помощью какой-то объект создавалася, например:
Код:
потому что в обратном случае, т.е., когда этими переменными объект не создаётся, обнуление переменной, ссылающейся на такой объект, не приведёт к её удалению из памяти игры. |
12.01.2009, 20:12 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
udg_Marine[(GetPlayerId(GetOwningPlayer(udg_Marine[GetRandomInt(0, 5)]))]
Ну вообще я просто запутался ... маринов 6.... у переменной отчёт с 0. :) Вот я и сделал с 0 до 5 рандомное число. То есть короче говоря... каждый раз... из переменной ( Она уже задана в другом триггере и не меняется всю игру(если игроки не ливают или погибают)) берётся юнит игрока которым он уже играет ( находиться на карте) и около этого игрока создаётся регион размером 4000 на 4000 в котором появляются 4 зомби. Так же как заметил... в этом триггере спавнятся некромансеры :)... но они спавнятся только в определённом участке который уже создан в редакторе. Проще говоря... просто я не хочу привязывать это к определённому типу юнитов... так как игрок может играть разными типами юнитов. PS: Спасибо огромное... триггер отлично работает! Ranger21 добавил: Ещё вопросик... как реализовать в этом же триггере проверку на наличие юнитов в Marine[0-5] ? Просто надо чтобы юниты создавались всегда около играющих игроков (игрока) Ranger21 добавил: Вообщем... триггер работает отлично только для первого игрока. Для 2ого игрока - часть зомби создаются в левом месте. Для 3ого игрока - ещё больше зомби создаются в левом месте. Для 4ого игрока - ещё ещё больше зомби создаются в другом месте... не рядом с пехотинцами в районе 4000x4000 Для 5ого.... - ещё..... ещё.... Для 6ого - все Зомби создаются в левом месте. Вообщем надо как-то внести проверку есть ли юнит в игре или нету. Как я понял... просто у первого игрока он работает отлично... потому что видит... что первый игрок играет и дальше не идёт перебирать... PS: Marine [0-5], игроков 6. У первого игрока - Marine[0] , второго [1], 3 - [2], 4-[3], 5 - [4] , 6 - [5]. Незнаю я как проверку делать на наличии юнита в переменной( Ranger21 добавил: Всё пытаюсь... проверка не выходит=) Отредактировано Ranger21, 12.01.2009 в 20:40. |
12.01.2009, 22:19 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Код:
|
12.01.2009, 22:24 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
DFlyer Да.... только действия по созданию юнитов это же тоже цикл ?
Код:
Выйдет глюк =0 Хотя допустим мы без цикла этого...( ненадо создавать сразу 4ех зомби - хотя мне желательно) Но разве после этой проверки будут создаваться регионы для создания зомби около пехотинцы 6ого игрока? Они и щас не создаются... почему-то... Код:
Мне же надо эту проверку в этот триггер |
12.01.2009, 22:31 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Цитата:
Ну дак создай цикл внутри цикла. Просто заюзай другую переменную вместо i. |
|
12.01.2009, 22:45 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
DFlyer
Цикл явно не туда надо вставлять...( Проверил в игре... всё равно происходит тоже самое) вся проблема в этой строчке local rect rct = RectByCenter(udg_Marine[(GetPlayerId(GetOwningPlayer(udg_Marine[GetRandomInt(0, 5)])))], 4000, 4000 ) Регион не должен создаваться если переменная = null А у меня тут стоит [GetRandomInt(0, 5)]..... то есть регион так или иначе создаётся рандомно... а он должен создаваться только там где переменная !=(не равна) null Но перед локалкой if не поставишь( |
12.01.2009, 23:09 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
а ты сначала объяви локалку, а потом присваивай её значение:
Код:
|
12.01.2009, 23:26 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Ура)))))) разобрался!) Работает для всех игроков и зомбаки создаются как надо...)
Увеличил время между периодами спавна на 1 секунду... ну это уже дело баланса:), так как зомби терь будут всегда рядом спавниться.... Код:
Ток один вопрос....а юниты эти случаем не будут спавниться за пределами карты? Если игрок будет около предела.... это же вроде крэш вызывает А впрочем щас сам проверю Крэш стабильно Отредактировано Ranger21, 13.01.2009 в 08:59. |
13.01.2009, 00:20 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Надо делать проверку чтоли.... чтобы юниты не создавались за картой?
А когда кусок региона создаётся за картой... это можно? Что-то я не правильно написал.... начинает стабильно зависать уже при запуске триггера :), если игрок 1 играет.... Вообщем насчёт крэша за пределами мапы - не проверял.... но вот к сожалению триггер успешно протестил и работает он только, если играет 6ой плеер... А при первом игроке вообще стабильно повисает((((( Как луп написать...чтобы он не вис для всех игроков?=( Вот код мой. PS: num = 6 Код:
Ranger21 добавил: Кто поможет ? xD Отредактировано Ranger21, 13.01.2009 в 09:00. |
13.01.2009, 09:28 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Van Damm
wait... what?
offline
Опыт:
22,268Активность: |
» код Код:
Немного почистил, должно работать. От CountUnitsInGroup() и иже с ним попробуй избавиться сам ) Van Damm добавил: Кстати, хорошо было бы заиметь сворачиваемые области для кода, как на wc3c =) |
13.01.2009, 10:53 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|