XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Kenshi245

offline
Опыт: 2,252
Активность:
Как реализовать без утечек?
Как реализовать евент для триггера (юнит входит в игровую зону)?

Есть только стандартный вариант, но он с утечками:
Код:
call TriggerRegisterEnterRectSimple( gg_trg_Trigger, GetPlayableMapRect() )
Старый 21.05.2008, 21:31
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Kenshi245
Где утечки?
Старый 21.05.2008, 21:34
S

offline
Опыт: 43,833
Активность:
юзай
Код:
call TriggerRegisterEnterRectSimpleQ

предварительно добавив в нестандартный код
Код:
function TriggerRegisterEnterRectSimpleQ takes trigger trig, rect r returns event
    local region rectRegion = CreateRegion()
    call RegionAddRect(rectRegion, r)
    return TriggerRegisterEnterRegion(trig, rectRegion, null)
    set rectionRegion=null
endfunction

насколько помню создание основной функции которая создает утечки фиксится созданием аналогичной функции, но с измененным названием (в настоящее время - добавлена буква Q)

Sasha добавил:
Цитата:
Где утечки?

видимо он о том что рект не обнуляется

Отредактировано Sasha, 21.05.2008 в 21:54.
Старый 21.05.2008, 21:35
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от Sasha
видимо он о том что рект не обнуляется


Именно

Kenshi245 добавил:
Цитата:
Сообщение от Sasha
юзай
Код:
call TriggerRegisterEnterRectSimpleQ

предварительно добавив в нестандартный код
Код:
function TriggerRegisterEnterRectSimpleQ takes trigger trig, rect r returns event
    local region rectRegion = CreateRegion()
    call RegionAddRect(rectRegion, r)
    return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction

насколько помню создание основной функции которая создает утечки фиксится созданием аналогичной функции, но с измененным названием (в настоящее время - добавлена буква Q)


Не понимаю, а что тут изменилось, получилась такая же функция с теми же утечками?
Старый 21.05.2008, 21:41
S

offline
Опыт: 43,833
Активность:
Kenshi245
пофиксил

а вообще чтобы удалить утечку бж-фии обычно её переносят в сам код и просто изменяют имя... у мну по крайней мере работает о_О
Старый 21.05.2008, 21:54
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от Sasha
Kenshi245
пофиксил

а вообще чтобы удалить утечку бж-фии обычно её переносят в сам код и просто изменяют имя... у мну по крайней мере работает о_О


А вообще говорят что лучше не юзать регионы, хз почему(
Старый 21.05.2008, 22:43
Vadim

offline
Опыт: 603
Активность:
Цитата:
А вообще говорят что лучше не юзать регионы, хз почему(


Хз хз... Вот например есть хорошая фи-я GetTriggeringRegion(). Для ректа такой нету. С регионами проще работать из-за наличия этой фии.
Старый 22.05.2008, 00:46
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
а вообще чтобы удалить утечку бж-фии обычно её переносят в сам код и просто изменяют имя...


это что то совершенно новое... и совершенно неправильное...

Код:
call TriggerRegisterEnterRegion(t, bj_mapInitialPlayableArea, null)


Код:
//===========================================================================
function InitMapRects takes nothing returns nothing
    set bj_mapInitialPlayableArea = Rect(GetCameraBoundMinX()-GetCameraMargin(CAMERA_MARGIN_LEFT), GetCameraBoundMinY()-GetCameraMargin(CAMERA_MARGIN_BOTTOM), GetCameraBoundMaxX()+GetCameraMargin(CAMERA_MARGIN_RIGHT), GetCameraBoundMaxY()+GetCameraMargin(CAMERA_MARGIN_TOP))
    set bj_mapInitialCameraBounds = GetCurrentCameraBoundsMapRectBJ()
endfunction

//... --->

function InitBlizzard takes nothing returns nothing
    // Set up the Neutral Victim player slot, to torture the abandoned units
    // of defeated players.  Since some triggers expect this player slot to
    // exist, this is performed for all maps.
    call ConfigureNeutralVictim()

    call InitBlizzardGlobals()
    call InitQueuedTriggers()
    call InitRescuableBehaviorBJ()
    call InitDNCSounds()
    call InitMapRects()
    call InitSummonableCaps()
    call InitNeutralBuildings()
    call DetectGameStarted()
endfunction

//... --->

//===========================================================================
function main takes nothing returns nothing // main from some map
    call SetCameraBounds(- 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT) , - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM) , 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT) , 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP) , - 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT) , 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP) , 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT) , - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))
    call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl" , "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
    call NewSoundEnvironment("Default")
    call SetAmbientDaySound("BlackCitadelDay")
    call SetAmbientNightSound("BlackCitadelNight")
    call SetMapMusic("Music" , true , 0)
    call CreateAllUnits()
    call InitBlizzard()
    call InitGlobals()
    call InitCustomTriggers()
    call RunInitializationTriggers()

endfunction


ADOLF добавил:
Цитата:
function TriggerRegisterEnterRectSimpleQ takes trigger trig, rect r returns event
local region rectRegion = CreateRegion()
call RegionAddRect(rectRegion, r)
return TriggerRegisterEnterRegion(trig, rectRegion, null)
endfunction


гениально, для каждого тригера создавать новый регион... догадайтесь никогда не использовать эту функцию...
Старый 22.05.2008, 07:57
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от ADOLF
гениально, для каждого тригера создавать новый регион... догадайтесь никогда не использовать эту функцию...


А как же тогда делать евент появления юнита на карте?
Старый 22.05.2008, 14:17
YellowStar
poon
offline
Опыт: 15,144
Активность:
Я почему то никогда не заморачивался об утечках. раньше помню были времена о джассе никто не знал, и смотрите же нормальные карты делали.
Старый 22.05.2008, 14:53
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
А как же тогда делать евент появления юнита на карте?

я имел ввиду сашин код
Цитата:
почему то никогда не заморачивался об утечках

ну опять же либо ты пишешь норм, либо пишешь кг/ам, но писать примерно одинаково
Старый 22.05.2008, 18:58
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от ADOLF
я имел ввиду сашин код

ну опять же либо ты пишешь норм, либо пишешь кг/ам, но писать примерно одинаково


Я не понял тот код, что ты написал это что? Правильный вариант или объяснение возникновения утечки?
Старый 22.05.2008, 19:41
Лось

offline
Опыт: 7,223
Активность:
Это обьясняет что в переменную bj_mapInitialPlayableArea заносится играбельная область при ините мапы.
Старый 22.05.2008, 19:50
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от Лось
Это обьясняет что в переменную bj_mapInitialPlayableArea заносится играбельная область при ините мапы.


То есть эта вот штуковина не вызовет утечек?

Код:
call TriggerRegisterEnterRegion(t, bj_mapInitialPlayableArea, null)


Как бы там ни было этот способ не работает, пишет ошибку - неверный аргумент (рект)
Старый 22.05.2008, 23:26
Лось

offline
Опыт: 7,223
Активность:
Ну там та надо region ,а не rect вот и пишет.. Зделай лучше при ините карты так:
Код:
globals
    region PlayableRegion = CreateRegion()
endglobals

call RegionAddRect(PlayableRegion,bj_mapInitialPlayableArea)

И еспользуй PlayableRegion.
Старый 23.05.2008, 07:20
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от Лось
Код:
globals
    region PlayableRegion = CreateRegion()
endglobals


Ошибку выдает. Wxcepted end of line
Старый 25.05.2008, 00:47
Лось

offline
Опыт: 7,223
Активность:
Юзай JNGP или создай глобалку в редакторе переменных.

Отредактировано Лось, 25.05.2008 в 09:31.
Старый 25.05.2008, 07:21
Hexus
Looking for a victim
offline
Опыт: 19,166
Активность:
* Jass New Gen Pack.
Старый 25.05.2008, 08:32
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 07:17.