Время в игровом движке

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

Модераторы: Smoky555, Группа модераторов

Время в игровом движке

Сообщение Tanatos » Пт июл 20, 2007 18:56

У меня вопрос несколько отвлеченный от OTTD, но тем не менее касается разработки подобных игр.

Уважаемые форумчане подскажите как строится игровой цикл в подобных играх. Насколько я понимаю есть некий "игровой цикл". За один проход изменяется положение каждого объекта, затем происходит вывод на экран. Смена положения расчитывается исходя из скорости транспорта и времени цикла (фиксированное). Получается, что при обработке 30 раз в секунду имеем 30 кадров в секунду с равномерно движущимися машинками, поездами ...

Все замечательно пока у нас фиксированная скорость. А что делать если мы хотим изменить скорость увеличив или уменьшив ее раза в три?

Если изменим время одного "игрового цикла", то получим иное поведение транспорта так как пропустить в ожидании (например в ожидании зеленого на светофоре) один цикл при скорости 1:3 это уже будет не тоже самое что при скорости 1:1. А значит поезда станут ездить медленней и доход будет иной.

Кто знает как реализованно ускорение в OTTD? Сдается мне, что "игровой цикл" просто вызывается в два раза чаще, а значит вся обработка ровно таже самая, просто на экране мы видим более быстрое движение поездов. Но нут другая засада - мы не можем замедлять ход времени, а ускоряться можем только в кратное кол-во раз х2, х3, х4, х5, х6 и т.д.

В идеале это что-то вроде Simutrans-овского подхода ко времени. Но как это реализованно на уровне алгоритмов????

Заранее благодарю за советы и мысли. Попробую еще поискать на игровых форумах, если сам найду что-то стоящее отпишу сюда если будет интересно.
Tanatos
Машинист
Машинист
 
Сообщения: 35
Зарегистрирован: Ср окт 04, 2006 09:16

Сообщение Killen » Сб сен 08, 2007 03:17

Все целиком и полностью зависит от игры. А вообще, об этом лучше спрашивать не на игровых форумах, а на форумах по программированию (в т.ч. игровому).
Аватара пользователя
Killen
Начальник станции
Начальник станции
 
Сообщения: 114
Зарегистрирован: Ср окт 11, 2006 05:32

Сообщение mighty » Чт сен 13, 2007 22:30

Запускаю ОпенТТД на разных компьютерах, так как мощность компьютеров отличается существенно, то заметил, что ускорение на этих компьютерах разное. На слабом компьютере игра ускоряется не очень сильно, а вот на мощном компьютере всё перемещается настолько быстро, что не усеваешь уследить за чем-либо. Отсюда вывод, что в данной игре не получится ускориться кратно. получается, что на скоростном компьютере, так называемый "расчитанный кадр" держится некоторое время в памяти, потом выводится на экран, и расчитывается следующий "кадр". То есть между "кадрами" установленно фиксированное время (реальное, а не игровое). А при ускорении никакой задержки нет, поэтому ускорение на разных компьютерах работает с разной скоростью.
На совсем слабом компьютере, транспорт ползал как черепаха, и ускорение не давало никакого эффекта (как ползал без ускорения, так же ползал с той же скоростью и с ускорением), так как компьютер итак не успевал расчитать следующий "кадр" в отведенное реальное время.
Получается, что никакой засады нет, мы прекрасно можем замедлять игру, просто надо увеличить время задержки между "кадрами".
Аватара пользователя
mighty
Диспетчер
Диспетчер
 
Сообщения: 235
Зарегистрирован: Пн май 16, 2005 13:02
Откуда: Украина

Сообщение Dictu » Сб сен 15, 2007 02:14

ИМХО, народ решил не париться и сделать по-простому. На обычной скорости цикл обсчёта игры привязан к таймеру. При ускорении такой привязки нет, игра идёт настолько быстро, насколько комп успевает её обсчитывать, новый цикл считается сразу по завершении предыдущего. Косвенно это доказывается тем, что все встреченные мной компы при ускорении начинали серьёзно тормозить во всех остальных приложениях - ОТТД жрёт все свободное процессорное время. В моём случае - 84% против 5% в обычном режиме. Эдакое ultimate ускорение. Думаю, это правильно.

С замедлением проблем возникнуть не должно - это лишь слегка изменённая версия обычного режима, который по сути своей и так замедленный. Вообще, замедление раз в шестнадцать могло бы оказаться полезным: народ перестал бы требовать возможности строить на паузе. Был бы режим "почти паузы" :::)

Единственное - я не уверен, что это надо. Станет ли лучше геймплей с того? Узнать можно только одним способом: сыграть с такой (пока несущемствующей) фичей целую игру.

ЗЫ: Что-то я написал почти то же, что и предыдущий оратор.
ЗЗЫ: на ходе поездов и притоке денег изменение времени не отразится никак, т.к. замедляется/ускоряется время всего мира сразу. Нету такого, чтобы в замедленной игре шмыгали юркие поезда или наоборот.
Аватара пользователя
Dictu
Директор
Директор
 
Сообщения: 260
Зарегистрирован: Пн окт 31, 2005 17:02
Откуда: Москва


Вернуться в Разработка OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

cron