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

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

Закрытая тема
 
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Нативка вызывает лаги!
Хм обьясните почему UnitAddItem вызывает лаг(причём лаг всмысле зависания экрана на 1сек) допустим если в одной функции использовать больше чем 1 раз циклом или без.Можете проверить.Можно ли как то это обойти?
Старый 14.05.2009, 20:44
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
9thNerZul, можно. При инициализации карты добавляй и удаляй предмет и все будет ок. Так же лаг вызывает UnitAddAbility.
Старый 14.05.2009, 20:46
agentex

offline
Опыт: 34,534
Активность:
вообще это немного глючная функция. например в некоторых ситуациях когда через нее даеш итем герою, не срабатывает событие PICKUP_ITEM.
9thNerZul, можно отдавать приказ, если итем лежит на земле:
Код:
call IssueTargetOrderById(юнит, 851971, итем)


agentex добавил:
хотя лаги вызывать она не должна
только если итем создается впервые, ну в этом случае предзагружай итем, как сказал Hellfim
Старый 14.05.2009, 20:59
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
не я немогу отдавать ордер! сбрасывается предыдущий.Есть ещё способы?
Старый 14.05.2009, 21:05
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
Цитата:
При инициализации карты добавляй и удаляй предмет и все будет ок.
Старый 14.05.2009, 21:14
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Цитата:
Сообщение от Hellfim
9thNerZul, можно. При инициализации карты добавляй и удаляй предмет и все будет ок. Так же лаг вызывает UnitAddAbility.

Хм, кому?Дамми?Мне ведь нужно чтоб не только одному юниту было или эт на всех распространяется?
Старый 14.05.2009, 23:30
RazArt

offline
Опыт: 11,197
Активность:
9thNerZul, та кому угодно давай
Старый 14.05.2009, 23:33
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
И ещё) будут после этого она работать со всеми предметами или только с этим.Плю ты говоришь кому угодно тоесть приинициализации карты я должен создать дамми, дать ему предмет, удалить предмет, удалить дами и все?Так можно?
Старый 14.05.2009, 23:41
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
9thNerZul, да.
Старый 14.05.2009, 23:42
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Цитата:
Сообщение от Hellfim
9thNerZul, да.

Да это ко второму вопросу? Если да) то ответьте на первый плиз.
Старый 14.05.2009, 23:43
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
Совершенно любому юниту. То же самое и с UnitAddAbility, и думаю ты знал, что модель в варе подгружается только при попадании в кадр (первый раз), для моделей есть функция Preload.
Старый 14.05.2009, 23:47
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Так я чё то и недопонял то есть при инициализаци ты даёшь любой предмет ,любому юниту и, после этого можно использовать эту функцию сколько угодно с какими угодно предметами без лагов?

9thNerZul добавил:
м?
Старый 14.05.2009, 23:58
SRes
1110101000
offline
Опыт: 9,997
Активность:
Один раз заюзал предмет\триггер\еффект\etc и он уже загрузился в оперативную память и пока вар не закроешь - оно там будет.
Это мое нипрошареное представление, так что не бейте ногами
Старый 15.05.2009, 00:10
Toadcop

offline
Опыт: 53,013
Активность:
9thNerZul а лутче ничего не делай и релиз версию прогани через Widgetizer =) (SLK оптимизацыя) и лаги изчезнут О_О точней они ОЧЕНЬ сильно минимизируетса и в игре они будут незаметны. (это всё что связано с объетами)
Старый 15.05.2009, 00:55
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Да вот не могу я так) мне интересна сама суть чтоб и без его оптимизации не лагало).
Хм странно ну допустим:
Код:
function Trig_s_Actions takes nothing returns nothing
local item it
set it=CreateItem('spsh',0,0)
call UnitAddItem(gg_unit_Obla_0022,it)
call UnitRemoveItem(gg_unit_Obla_0022,it)
call RemoveItem(it)
set it=null
endfunction
function InitTrig_s takes nothing returns nothing
set gg_trg_s=CreateTrigger )
call TriggerAddAction(gg_trg_s,function Trig_s_Actions)
endfunction


При инициализации даёт предмет юниту на карте предмет,потом удаляет его у юнита,потом удаляет сам предмет, но даже после этого функция продолжает вызывать лаги!!!

9thNerZul добавил:
О_о ВТФ)!

Отредактировано 9thNerZul, 15.05.2009 в 11:48.
Старый 15.05.2009, 11:48
SRes
1110101000
offline
Опыт: 9,997
Активность:
А она вообще работает ? Ты проверял ? Засунь какое-то дебаг сообщение...
Старый 15.05.2009, 12:14
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Цитата:
Сообщение от SRes
А она вообще работает ? Ты проверял ? Засунь какое-то дебаг сообщение...

..да если не удалять предмет то он появляется у юнита)))

9thNerZul добавил:
хэлп!!)
Старый 15.05.2009, 12:40
agentex

offline
Опыт: 34,534
Активность:
Код:
call UnitRemoveItem(gg_unit_Obla_0022,it)
call RemoveItem(it)

о_О нах ты 2 раза удаляеш предмет? достаточно call RemoveItem(it)

agentex добавил:
Цитата:
но даже после этого функция продолжает вызывать лаги!!!

ну значит в этом повинны другие тригеры у каторых событие PICKUP_ITEM
Старый 15.05.2009, 13:41
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
Хм спс за идею ща их отключу!
Позже отпишусь...
Цитата:
ну значит в этом повинны другие тригеры у каторых событие PICKUP_ITEM

Да хм в чём прикол ща скину код...

Код:
function UHI takes unit u, integer ii returns boolean
    local integer ix=0
    loop
    if GetItemTypeId(UnitItemInSlot(u, ix)) == ii then
    set u=null
    set ix=0
    set ii=0
    return true
    endif
    set ix = ix + 1
    endloop
    set u=null   
    set ix=0
    set ii=0
    return false
endfunction

function UIS takes unit u, integer ii returns integer
    local integer ix=0
    loop
    exitwhen ix>5
    if GetItemTypeId(UnitItemInSlot(u, ix)) == ii then
    return ix
    endif
    set ix = ix + 1
    endloop
    set u=null
    return 0
endfunction


function Trig_Axe_Conditions takes nothing returns boolean
return UHI(GetManipulatingUnit(), 'srbd') and UHI(GetManipulatingUnit(), 'I00I') == true and UHI(GetManipulatingUnit(), 'srtl') == true
endfunction

function Trig_Axe_Actions takes nothing returns nothing
    local unit u = GetManipulatingUnit()
    call RemoveItem(UnitItemInSlot(u,UIS(u,'srtl')) )
    call RemoveItem(UnitItemInSlot(u,UIS(u,'I00I')))
    call RemoveItem(UnitItemInSlot(u,UIS(u,'srbd')))
    call UnitAddItem(u, CreateItem('ofir', GetUnitX(u), GetUnitY(u)))
    call DestroyEffect( AddSpecialEffect("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl", GetUnitX(u), GetUnitY(u)) )
    set u = null
endfunction
function InitTrig_Axe takes nothing returns nothing
    set gg_trg_Axe = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Axe, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddCondition( gg_trg_Axe, Condition( function Trig_Axe_Conditions ) )
    call TriggerAddAction( gg_trg_Axe, function Trig_Axe_Actions )
endfunction

если этот триг рабоает то лагает)

9thNerZul добавил:
помогите(

Отредактировано 9thNerZul, 15.05.2009 в 18:14.
Старый 15.05.2009, 18:47
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
» code

Код:
function UHI takes unit u, integer ii returns boolean
    local integer ix=0
    loop
        exitwhen ix>5
        if GetItemTypeId(UnitItemInSlot(u, ix)) == ii then
            return true
        endif
        set ix = ix + 1
    endloop
    return false
endfunction

function Trig_Axe_Conditions takes nothing returns boolean
    return UHI(GetManipulatingUnit(), 'srbd') and UHI(GetManipulatingUnit(), 'I00I') and UHI(GetManipulatingUnit(), 'srtl')
endfunction

function Trig_Axe_Actions takes nothing returns nothing
    local unit u = GetManipulatingUnit()
    call RemoveItem(UnitItemInSlot(u,UIS(u,'srtl')) )
    call RemoveItem(UnitItemInSlot(u,UIS(u,'I00I')))
    call RemoveItem(UnitItemInSlot(u,UIS(u,'srbd')))
    call UnitAddItem(u, CreateItem('ofir',0,0)
    call DestroyEffect( AddSpecialEffectToUnit("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl",u,"origin")
    set u = null
endfunction

function InitTrig_Axe takes nothing returns nothing
    set gg_trg_Axe = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Axe, EVENT_PLAYER_UNIT_PICKUP_ITEM )
    call TriggerAddCondition( gg_trg_Axe, Condition( function Trig_Axe_Conditions ) )
    call TriggerAddAction( gg_trg_Axe, function Trig_Axe_Actions )
endfunction


Лаги могут не исчезнуть, но так определенно лучше.
Старый 15.05.2009, 19:01
Закрытая тема

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

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

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

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



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