2012-04-05 3 views
3

Я кодирую игру-клон гитарного героя. Он работает хорошо, но на быстрых компьютерах (при высоких частотах кадров) анимация не всегда плавная. Я имею в виду, что иногда заметки прокручиваются с шишками. Я узнал, что проблема, вероятно, связана с моим циклом игры, который не закрывает fps (поскольку я обновляю время прохождения кадра, я думал, что это не обязательно). Когда происходит падение, скажем, от 140 кадров в секунду до 60, эти удары заметны.Написание лучшего игрового цикла

Я взглянул на этот сайт: http://www.koonsolo.com/news/dewitters-gameloop/, и я пытаюсь реализовать подход «FPS зависит от постоянной скорости игры», чтобы проверить, исправлена ​​ли проблема.

Проблема в том, что обновление и рендеринг моей игры устойчивы на скорости 60 кадров в секунду, а звуковой сигнал, похоже, называется намного больше. Я использую Audiere for Sound и SDL для таймера/ввода.

Я думал, что SDL_Delay приостановит игру, пока не закончится, но это не похоже. Есть что-то, что мне не хватает? Является ли SDL не реальной личностью для времени?

+1

Вам может быть интересно, как Unity3D справляется с этой проблемой, посмотрите http://unity3d.com/support/documentation/ScriptReference/Time-deltaTime.html – OneThreeSeven

ответ

4

Некоторые примеры или псевдокоды были бы очень полезны, чтобы знать, что вы делаете. Из документации по SDL_Delay:

Эта функция ждет заданное количество миллисекунд перед возвратом. Он ожидает как минимум указанное время, но возможно дольше из-за планирования ОС. Задержка зернистость составляет не менее 10 мс. Некоторые платформы имеют более короткие тактовые сигналы, но это наиболее распространенные.

Это может затягивать слишком много. Предполагая, что вы используете цикл while, попробовали ли вы просто «продолжить», чтобы замедлить ничьи? Если вы выполните SDL_Delay (1), это может занять больше времени и, таким образом, испортить ваши расчеты.

+0

@ Шахбаз Просто пересматривая здесь и понял, что забыл дать отзыв об этом. Оказалось, что это была проблема с SDL_Delay(), поскольку я работаю над циклом занятости до тех пор, пока время, которое я хочу ждать, не будет выполнено. –

1

SDL на самом деле отлично подходит для игр! Это всегда было моим любимым, потому что это удивительно низкий уровень.

Ваш обратный вызов для SDL-звука всегда будет вызван очень быстро! Обычно вы видите визуальную анимацию, отображаемую со скоростью 60 кадров в секунду, потому что это выглядит хорошо для наших глаз. Звук ПК обычно работает со скоростью 44 100 выборок в секунду. Это требует гораздо большей поддержки, чтобы убедиться, что аудиоустройство имеет образец для воспроизведения! SDL будет запускать обратный вызов так быстро, как это необходимо, чтобы предотвратить сбои звука.

Смежные вопросы