2012-01-20 1 views
2

Как бы вы описали событие, в течение которого это очень важно? В большинстве игр используются фреймы, а симуляции происходят по временным шагам. Что, если произошло событие, требующее определенного времени?Временное моделирование, не зависящее от частоты кадров

Например, в игре, подобной DOTA, скорость атаки очень важна. Предположим, что время для этой игры составляет 50 мс. Два героя сражаются. HeroA атакует HeroB и наносит «смертельный удар» на 14 мс в тайм-шаг. HeroB атакует HeroA, а также наносит «убойный удар», только это происходит на 40 мс во временном шаге. Однако ни один из этих ударов не будет имитирован до 50 мс. Таким образом, в 50 мс оба героя будут убиты, когда на самом деле нужно оставить герою только HeroA, потому что ему удалось атаковать в первую очередь.

Есть ли способ объяснить это?

+0

Прогнозирование. Одноранговые игры обычно берут оба результата и делают все возможное, чтобы выяснить, что более вероятно. Вы должны понять, что даже 50-секундный тайм-аут (который огромен для игры) может быть меньше, чем латентность. Выделенные серверы могут сделать это лучше, потому что ни один человек не имеет преимущества быть хозяином, но даже тогда у одного человека может быть больше латентности, поэтому многое следует учитывать при принятии решения о том, какое событие действительно могло произойти в первую очередь, а не даже о том, что даже сервер получил первый. Запуск кода прогнозирования в другом потоке также может помочь. –

+0

Я понимаю, как работают разные сетевые топологии, поэтому не стесняйтесь больше рассказывать о том, что вы говорите, но я думаю, что вы в основном просто перефразировали и даже расширили сферу моего первоначального вопроса. Даже сетевые команды отправляются с определенной скоростью, когда сервер отслеживает, какие команды выполнять с каким интервалом. Это, безусловно, позволяет каждому моделированию клиентов работать с детерминированным шагом блокировки, но как определить более мелкие детали между шагами времени? Или я не понимаю ваш ответ? – DangerMcD

+0

Любые события, которые будут подключаться к сети, обычно будут отмечены временем. Также сервер будет пытаться синхронизировать время между клиентами и собой, чтобы любые временные метки от клиента были достаточно точными. В последнем проекте, на котором я был, клиент отправил сообщение «Я думаю, что я убил этого парня», и сервер оценил его, чтобы увидеть, может ли это произойти. Это была MMO, но без PVP, если вы добавите второго игрока, вы, вероятно, подождете небольшое количество времени для второго сообщения от другого клиента, чтобы узнать, были ли они также через них убиты или были убиты другим игроком. –

ответ

0

Я не знаю, как ваша игровая архитектура спроектирована, но если вы можете получить временные метки ваших событий, вы можете легко поместить их в буфер с другим Thread и обработать их в определенном порядке времени каждые 50 мс ,

+0

У меня была эта мысль, только без темы. Проблема, которую я имею в этом концептуально, заключается в том, что отметки времени должны храниться для каждого события, хотя я еще не думал о способе, который не связан с хранением временных меток. Просто кажется, что некоторые излишние накладные расходы, возможно, могут объяснить какой-то метод моделирования, который мне еще предстоит споткнуться. – DangerMcD