Як мені написати основний цикл гри? [зачинено]


130

Як мені написати основний цикл гри? Які речі ви повинні робити в ігровому циклі, і які речі ви не повинні робити в ігровому циклі?

Я написав їх багато, але ніколи не читав на ігрових циклах. Я впевнений, що міг би їх значно покращити, але не знаю як.


4
Зла відповідь: Що з використанням двигуна Someones, щоб зробити цю петлю для вас? :)
користувач712092

Ви можете запитати у користувача загальну кількість кадрів, які він хоче запустити, і використовувати цикл for, що збільшиться в п разів, ніж кількість буферів.
Uğur Gümüşhan

Відповіді:


121

Основний ігровий цикл вирішує три основні завдання:

  1. Отримати введення користувача
  2. Оновіть ігровий стан
  3. Намалюй гру

Простий цикл гри просто з’єднує ці три завдання в один цикл. Це має деякі небажані результати:

  1. Гра працює з різною швидкістю на різних комп’ютерах.
  2. Процесор (може бути без потреби) прив'язується до 100% використання.
  3. "Стани гри" / меню відсутні або змішані з кодом гри.
  4. Основний цикл гри дуже довгий і важкий в обслуговуванні.
  5. Код важко поширити / перенести на інші платформи.

Розширені ігрові петлі вирішують проблеми, перелічені вище. Ось кілька корисних статей:

Щоб отримати чудовий приклад циклу ігор, подивіться демонстраційну гру Allegro фігурист:

  • Код ігрового циклу знаходиться в Framework.c .
  • Перегляд вихідного тексту тут .

Ігрові петлі часто виконують один і той же вид роботи для більшості ігор, тому я продумав спосіб зробити узагальнений ігровий фреймворк. Краще написати одну реалізацію ігрового циклу та поділити його між іграми. Це економить роботу під час створення нової гри, а вдосконаленням циклу спільної гри можна поділитися всіма іграми (наприклад, додавши лічильник FPS або функцію зйомки екрана).


1
Так, як підозрюється, я точно можу вдосконалитись. Добре читає. Також дякую за публікацію коду. Приємно бачити фактичний код гри з цими матеріалами.
hokiecsgrad

1
Процесор повинен затримуватися на 100% використання (або більше, як 50%, якщо у вас є щонайменше 2 ядра). Подумай над цим. Як ви збираєтеся отримати крайню фізику, графіку вбивць, якщо ви сидите там, говорячи собі: "О, але я не хочу використовувати весь процесор". Так, ви повинні використовувати 100% процесора, якщо це можливо (це означає багатопотоковість на сучасних комп'ютерах, тому дуже важко реально використовувати 100% 4 ядра весь час). Максимально використовуйте машину, на якій ви працюєте.
бобобобо

5
Дозволити додавати: Для настільних програм . На портативному пристрої ви будете спалювати набагато більше акумулятора, тому ви будете турбуватися про 100% використання.
bobobobo

1
@ user6003859: я виправив посилання.
Лефтій

1
ще одне корисне посилання: gameprogrammingpatterns.com/game-loop.html
brita_

51

Я рекомендую статтю Глена Фідлера про надійну рамкову незалежність " Виправте свій крок! "

(Менш стосується теми, що знаходиться під рукою, але інші статті з серії також досить непогані - як і все на його сайті!)


Це, безумовно, кілька справді хороших статей. Дякуємо за публікацію!
hokiecsgrad

1
Я є другою рекомендацією щодо надійної незалежної реалізації кадрів. Все у вашій грі має бути реалізовано як дельта-значення, яке ви періодично оновлюєте. І це не слід робити обов’язково, коли ви переходите до наступного кадру. Насправді, якщо ви пропустили кадр, ви, мабуть, дійсно не хочете просто називати свої методи оновлення двократною дельтою. Більш послідовно було б виклик свого оновлення двічі однією і тією ж дельтою. Однозначно знайдіть час, щоб дізнатися про проблеми, пов'язані з частотою кадрів та циклом оновлення. Це заощадить ваш час пізніше.
Денніс Мунсі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.