CustomGames.ru - Dota 2 пользовательские игры

Влияние таймеров на игру

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Faith

  • 18
  • Мощь: 0
Влияние таймеров на игру
« : 19-11-2016, 16:12:13 »
Где-то слышал, что либа таймеров от barebones , при достаточном количестве - дропает фпс. Правда ли? Стал замечать что в моей моде происходят такие дропы.
Например, вместо motion-контроллеров я использую функцию такого рода.
Код
function MotionFunc( ... )
    local caster,direction,distance,duration,stun = ...
    local tick = 0.02
    local dur = 0
    local point
    local speed = distance / duration * tick
    caster:AddNewModifier(nil, nil, "modifier_phased", {duration=duration})
    if stun then
        caster:AddNewModifier(nil, nil, "modifier_stunned", {duration=duration})
    end
    Timers:CreateTimer(function()
        if dur < duration then
            dur = dur + tick
            local caster_location = caster:GetAbsOrigin()
            point = caster_location + speed * direction
            caster:SetAbsOrigin(point)
            return tick
        else
            FindClearSpaceForUnit(caster, caster:GetAbsOrigin(), false)
        end
    end)
end

Так-же использую увеличение стаков на модификаторах через подобный способ. И еще всякие прикалюхи типо увеличения статов, атаки и прочей прочей фигни. Все это работает через таймеры. При использовании способностей, особенно сразу нескольких - фпс дропается примерно на 5-10, боюсь если продолжу делать так - то фпс и вовсе будет неиграбельным :-\


Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Влияние таймеров на игру
« Ответ #1 : 19-11-2016, 16:55:52 »
Я без понятия, что там у BMD, не смотрел его библиотеку, но когда нашел стандартные valve счетчики (thinkers), пользуюсь ими. Думаю, он через них так же свою библиотеку реализовывал (просто сделал удобнее их применение, может попытался оптимизировать). Тут вон в конце урок с ними еще есть.

Оффлайн MahouShoujo

  • Продвинутый
  • 195
  • Мощь: 3
Re: Влияние таймеров на игру
« Ответ #2 : 19-11-2016, 23:56:46 »
Если дропается значит что что-то сделано коряво, сами таймеры так повлиять не могут при нормальном использовании. А вот thinker'ы - могут. Каждый thinker - это сущность, которая еще и с сервера приходит на клиент, недавно у разработчиков SWAT Reborn были проблемы с тем что у них 600 думалок было на карте и все дико начинало лагать. Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.

Оффлайн Faith

  • 18
  • Мощь: 0
Re: Влияние таймеров на игру
« Ответ #3 : 20-11-2016, 04:46:43 »
Если дропается значит что что-то сделано коряво, сами таймеры так повлиять не могут при нормальном использовании. А вот thinker'ы - могут. Каждый thinker - это сущность, которая еще и с сервера приходит на клиент, недавно у разработчиков SWAT Reborn были проблемы с тем что у них 600 думалок было на карте и все дико начинало лагать. Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.
Интересно, у меня есть несколько AI-шек крипов, сделанных как-раз таки на thinker'ах. Может быть в этом и проблема? Но их явно не 600, даже 30 не наберется...

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Влияние таймеров на игру
« Ответ #4 : 20-11-2016, 11:57:06 »
Timers сделаны на одном thinker'е, т.е. очень правильно и быстро.

Я так понимаю, BMD создает метатаблицу для всех функций и времени их активации, что создают используя его таймер, после чего просто в надлежащее время активирует ту или иную функцию? А как он выкручивается, когда время у двух объектов совпадает?

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Влияние таймеров на игру
« Ответ #5 : 20-11-2016, 12:40:57 »
Я так понимаю, BMD создает метатаблицу для всех функций и времени их активации, что создают используя его таймер, после чего просто в надлежащее время активирует ту или иную функцию? А как он выкручивается, когда время у двух объектов совпадает?
У каждого таймера у bmd есть свое имя, причем уникальное(см. DoUniqueString).
Потом в таблице хранится имя= { время_до_след_активации, функция}
И каждый тик времени из время_до_след_активации вычитается тик, если время = 0, то функция исполняется и возвращает значения до след времени. Если время = nil, таймер удаляется из таблицу. После этого все перейдет к след. элементу таблицы.

Оффлайн MahouShoujo

  • Продвинутый
  • 195
  • Мощь: 3
Re: Влияние таймеров на игру
« Ответ #6 : 20-11-2016, 15:57:59 »
Гспди... Какие метатаблицы, о чем ты, зачем ты говоришь терминами, которых не понимаешь? Ты думаешь что совпадении времени можно корректно обработать? Thinker'ы тоже не на магии работают.

Работают точно так же как и thinker'ы которые обрабатываются каждый тик и опрашиваются на соответствие времени целевому времени. Просто на одной энтити.

И по факту работает не так, как написал крайдес, учитесь читать код. Ничего там не вычитается. Просто сохраняется следующий момент времени когда таймер должен отработать.
Поэтому если внезапно время скакнет вперед то таймер отработает за все те тики, что он пропустил. Такого можно добиться если заставить время идти на паузе, например.

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Влияние таймеров на игру
« Ответ #7 : 20-11-2016, 16:38:49 »
Ну, собственно, вы оба повторили то, что я имел в виду, только в деталях.

Тогда напрашивается следующий вопрос: почему valve изначально не сделали работу счетчиков на одной сущности, раз таймеры BMD работают по такому принципу и якобы лучше счетчиков?

P.S. про метатаблицы: я работал с ними в геоинформационной конторе еще будучи студентом, так что я знаю, где и как можно их употреблять.

Оффлайн MahouShoujo

  • Продвинутый
  • 195
  • Мощь: 3
Re: Влияние таймеров на игру
« Ответ #8 : 20-11-2016, 19:29:59 »
Челик успокойся ты свой многолетний опыт повсюду приписываешь но в итоге нифига не знаешь. Почитай если знаешь английский на досуге) www.lua.org/pil/13.html

> Тогда напрашивается следующий вопрос: почему valve изначально не сделали работу счетчиков на одной сущности, раз таймеры BMD работают по такому принципу и якобы лучше счетчиков?

Потому что вальв насрать на то что там в луа который они не используют? Ору с ЯКОБЫ, хотя конечно не понимая как это работает внутри судя по твоему вопросу о срабатывании счетчиков в одно время удивляться нечему.

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: Влияние таймеров на игру
« Ответ #9 : 20-11-2016, 19:46:13 »
Опыт у меня не многолетний.

Чтож, раз нет подводных камней, тогда таймеры действительно лучше счетчиков.