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

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

Ответ
 
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
GetStoredInteger(udg_ddd, I2S(H2I(GetExpiredTimer
Старый 11.04.2008, 16:27
Kenshi245

offline
Опыт: 2,252
Активность:
Вот написал скрипт Death Coil, можете плиз заценить нет ли тут утечки и вообще насколько можно это все оптимизировать?

Код:
function GetMissleRange takes unit unitA, unit unitB returns real
local real Dx = GetUnitX(unitA) - GetUnitX(unitB)
local real Dy = GetUnitY(unitA) - GetUnitY(unitB)  
return SquareRoot(Dx*Dx+Dy*Dy)
endfunction

function H2I takes handle x returns integer
return x
return 0
endfunction

function I2U takes integer x returns unit
return x
return null
endfunction

function Death_Coil_Hit takes nothing returns nothing
    local unit unitA = I2U(GetStoredInteger(udg_Game_Cache, I2S(H2I(GetExpiredTimer())), "Death_Coil_Hit"))
    call FlushStoredMission(udg_Game_Cache, I2S(H2I(GetExpiredTimer())))
    call SetWidgetLife(unitA,GetWidgetLife(unitA)+500)
    call DestroyTimer(GetExpiredTimer())
endfunction

function Spell_Death_Coil takes nothing returns nothing
    local timer timerA = CreateTimer()
    local unit unitA = GetTriggerUnit()
    call StoreInteger(udg_Game_Cache, I2S(H2I(timerA)), "Death_Coil_Hit", H2I(unitA))
    call TimerStart(timerA, GetMissleRange(unitA,GetSpellTargetUnit())/1000, false, function Death_Coil_Hit)
    set timerA = null
    set unitA = null
endfunction

Отредактировано Kenshi245, 11.04.2008 в 21:57.
Старый 11.04.2008, 19:45
adic3x

offline
Опыт: 108,439
Активность:
очень слабо - полет снаряда отлавливать через дистанцию - вчерашний день
Старый 12.04.2008, 10:35
Kenshi245

offline
Опыт: 2,252
Активность:
А как надо правильно это делать?
Старый 12.04.2008, 11:33
J
expert
offline
Опыт: 48,447
Активность:
Kenshi245 надо периодическим таймером "пододвигать" снаряд к юниту, и как только он будет от него на малом растоянии совершать какиенибудь действия
Старый 12.04.2008, 11:39
adic3x

offline
Опыт: 108,439
Активность:
ну нетолько
также можно создавать тригер с отловом повреждений, и через проверку на соотв бафф делать свои действия
Старый 12.04.2008, 11:43
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от Jon
Kenshi245 надо периодическим таймером "пододвигать" снаряд к юниту, и как только он будет от него на малом растоянии совершать какиенибудь действия


Если таймер будет скажем раз в 0.1 секунду пододвигать снаряд, беря данные из кеша, то лагов не оберешься.

А вообще я просил посмотреть нет ли в скрипте утечек памяти) если не трудно.
Старый 12.04.2008, 14:31
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
для таких случаев используются глобальные массивы
Старый 12.04.2008, 14:36
J
expert
offline
Опыт: 48,447
Активность:
Kenshi245 0.1? вообщето чаще используют 0,04
хотя даже если 10 таймеров будут двигать юнитов беря данные из кеша никаких тормозов небудет, и даже если 50 будет то небудет тормозов, под 80 толкьо начнут появляется
но тут также се зависит от количеств операций с кешем, ну вообщем юзай массивы
Старый 12.04.2008, 14:38
adic3x

offline
Опыт: 108,439
Активность:
у меня 50~100 юнитов на пустой карте при запущенных на моем компе куче сторонних прог при обновлении .025 и перемещении по трем осям почти не лагают
Старый 12.04.2008, 15:36
Kenshi245

offline
Опыт: 2,252
Активность:
То есть если я сделаю 3 лайтинг эффекта + таймер, чтоб обновлял координаты для 3х юнитов каждые 0.05 секунд в течение 1-2 секунд времени баффа, беря данные из кеша, то не стоит беспокоиться о лагах при игре в 10-12 человек на карте?
Старый 12.04.2008, 15:44
J
expert
offline
Опыт: 48,447
Активность:
Kenshi245 при тох условиях что ты сказал лагов не будет совершено
Старый 12.04.2008, 16:13
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
только за границы карты следи чтобы лайтнинг не вылазили. Для плавного движения трех молний вообще по-хорошему можно использовать 0.025 период - будет все очень плавно.
Старый 12.04.2008, 18:48
Kenshi245

offline
Опыт: 2,252
Активность:
А как они вылезут за пределы карты если будут следовать за юнитами, к которым предписаны. Кстати а что будет если выйдут за пределы?
Еще один вопрос - перед тем как что-либо занести в кешь, нужно что-нибудь очищать или удалять, например освобождать слот в кеше через flush()?
Старый 12.04.2008, 20:59
Vadim

offline
Опыт: 603
Активность:
Цитата:
Еще один вопрос - перед тем как что-либо занести в кешь, нужно что-нибудь очищать или удалять, например освобождать слот в кеше через flush()?


Необязательно, новая запись перебьет старую.
Старый 13.04.2008, 01:00
Toadcop

offline
Опыт: 54,313
Активность:
ключевое слово пустая карта xD на практике в игровой карт всё по иному =)
Старый 13.04.2008, 01:16
Ответ

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

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

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

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



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