Який найкращий розроблений ігровий движок з відкритим кодом для прикладу? [зачинено]


15

Можливий повтор:
Де можна знайти хороші (добре організовані) приклади ігрового коду?

Я зашифрував кілька ігор на C ++ і тепер будую власний ігровий движок та редактор.

У мене є деякі сумніви щодо дизайну, і я хочу знайти чудові приклади, які слід наслідувати.

Що найкраще розроблено на вашу думку?

Повинно бути об'єктно-орієнтованим. Мова програмування не має значення, але я віддаю перевагу в такому порядку: C ++, C #, Java або інший подібний.

ВЕДЕНО: Щоб уточнити більше, мене не цікавить специфічний для гри код. Я хочу ігрові двигуни загального призначення.

ВЕДЕНО: Ця стаття пояснює, що таке ігровий движок: ігровий движок у Вікіпедії, а ось список відомих ігрових двигунів: список ігрових двигунів на Вікіпедії


3
Ви насправді розумієте моє запитання? Бажаю ігрових двигунів (не лише ігор ). І я попросив бути об'єктно орієнтованим . У потоці, про який ви сказали, відповіді стосуються лише ігор (Doom3, Prototype тощо). Також є графічний інструментарій (OpenSceneGraph), але в цьому потоці немає нічого конкретного щодо "ігрових двигунів" ... Ви можете закрити або видаліть моє запитання, якщо вам це не подобається, але я не розумію голосування проти: ...: моє питання не те саме
Дани

2
Щоб уточнити ще більше, мене не цікавить специфічний для гри код. Я хочу ігрові двигуни загального призначення.
Дани

3
Існує різниця: не всі ігри працюють над двигуном загального призначення. У Doom3 є специфічний двигун FPS, прототип - інший і так далі ... Можливо, у них є спільні речі (управління ресурсами, сценарії ...), але це не стосується мого питання. Моє запитання починається з фрази "Я кодував кілька ігор на C ++". Я ще раз підтверджую: моя потреба полягає в тому, щоб знайти хороший вихідний код двигуна загального призначення. Не джерело гри для пошуку багаторазового коду.
Дани

1
У Doom 3 є "двигун, специфічний для FPS", але також є всі частини, необхідні для загального двигуна - як ви кажете, управління ресурсами та сценарії, 3D-рендерінг, фізика тощо. Це загальний двигун і більше , не якось менше.

2
@Joe Wreschnig Я схильний погодитися з @Dani на цю тему. Хоча всі ігри працюють від певної форми двигуна, архітектурні структури, що використовуються для "одноразового" двигуна та двигуна, призначеного для роботи над декількома заголовками, є зовсім різними, навіть якщо вони обидва мають сценарій, управління ресурсами, візуалізацію 3D, тощо. компоненти. Крім того, перегляд коду для гри, побудованої на двигуні, розробленому тією ж студією, мабуть, не наймудріший вибір, оскільки це не дасть вам справжньої вказівки на те, наскільки гнучким та простим у користуванні двигуном є стороннє середовище.
Арі Патрік

Відповіді:


6

Я думаю, що найкращий спосіб створити ігровий движок - це почати з того, що ви вже добре знаєте, і додати ті функції, які нудні або повторювані.

Наприклад, я багато працюю з Python / pygame (це обгортка SDL). Мені дуже подобається система, але мене тривожили три речі:

  • Побудова циклу анімації є виснажливим, і всі вони майже однакові.
  • Основний спрайт-об'єкт дуже обмежений. Я хотів вдосконаленого спрайту з напрямком і швидкістю, здатності обробляти різні умови краю екрана, кілька зображень і кілька схем зіткнення.
  • Pygame не має функцій інтерфейсу користувача. Мені хотілося простих міток, кнопок і вибору номерів, які я
    міг легко додати до своїх ігор.

Створити об'єктно-орієнтовану обгортку навколо цих функцій було досить просто. Погляньте на главу 10 та документацію на Game Engine, доступну тут: http://aharrisbooks.net/pythonGame/

(Це було написано як частина книги, але ви можете вітати в ігровому двигуні, навіть якщо книги не хочете.)

Розділ 10 пояснює мотивацію та методи побудови базового 2D ігрового двигуна. Ви можете насолоджуватися цим, будуючи свій власний. Фактична мова не так важлива (за винятком, звичайно, вам потрібна мова OOP для підтримки OOP.) Якщо ви вже використовуєте SDL з C ++, ви можете почати з адаптації мого двигуна до C ++ / SDL.


8

Поважна конструкція двигунів Quake (ID tech) витримала випробування часом і, мабуть, є найуспішнішим дизайном ігрових двигунів усіх часів. Все, крім рендерінга, значною мірою не змінилося з кінця середини 90-х років і досі використовується в сучасних іграх, таких як ETQW.

Повний вихідний код для чотирьох ітерацій цього двигуна (Quake 1 до 3, плюс Wolf ET) доступний у GPL. Напевно, існує більше сотні активно розвинених громадськими ігровими двигунами на базі Quake, які підтримують їх актуальність в сучасну епоху. Особливо варто поглянути на XreaL за його фантастичний візуалізатор та ioQuake3 за вірне обслуговування Quake 3, оптимізованого під сучасне обладнання. Також для останніх "офіційних" ідентифікаційних версій двигуна доступна логіка гри (не для всього двигуна).

Навіть якщо ви не до кінця використовуєте цей ігровий механізм, його варто вивчити для його продуманої архітектури розділення клієнт-сервер та відокремлення логіки гри від деталей низького рівня.


1
Я б точно не називав об'єкт, орієнтований на технологічний об’єкт pre-Doom3 id.
Тетрад

3
Ні, не об’єктно-орієнтований, але, як я вже сказав, він вартий вивчення. Я маю на увазі, мабуть, просто тому, що це процедурна процедура, це не означає, що вона видасть вам рак очей, якщо ви подивитесь на це! ;)
Макс Е.

6

Бібліотека візуалізації Ogre3D досить близька до коду двигуна, і з усіх рахунків, про які я чув, дуже добре розроблена і дуже OO.

http://www.ogre3d.org/


+1 Чудовий двигун. Дякую Тетрад! Я вже знаю це, але я ніколи не використовував і не бачив його вихідний код. Чи знаєте ви, чи інтегровано AI (тобто пошук шляху тощо)
Дани

3
Я думаю, що це лише пов'язане візуалізація.
Тетрад

2
Ogre - це лише бібліотека графічного відтворення. Об'єктно-орієнтована графічна система візуалізації.
Джонатан Штернберг

0

Говорячи про ігровий двигун, я думаю, ви думаєте про все, що не є рендером, звуковим двигуном, двигуном фізики, двигуном введення тощо.

Таким чином, ви можете задуматися про ігрову архітектуру, AI або шаблон дизайну / системи тощо, які використовуються для структуризації програмного забезпечення для управління даними та іншими компонентами для створення якоїсь сцени / thater / ілюзії, створюючи таким чином керовані набори правил для налаштувати, щоб створити фактичну "відео-гру".

Це власне верхній шар відеоігри, і я навіть намагався трохи дізнатися про це, це величезна, складна і вимагає багато знань з усіх інших предметів. Уявіть, що ви хочете відтворити альтернативну реальність із нічого, простежувати та обчислюючи кожну кожну подію, а також відновлювати точні дані з них у будь-який момент: для кожного виду гри є якийсь підмножина ігрового двигуна, і я не хочу ' t думаю, що насправді можливо зробити загальний двигун, який є математично досить швидким. Навіть для гри, де ви керуєте одним персонажем, є ще багато речей, які можуть змінюватись і все-таки можуть вимагати від гри змінити всю архітектуру.

Ігрова індустрія не так добре обслуговується з відкритим кодом, як інші галузі комп'ютерних наук, лише тому, що розваги мають різні види ліцензій, які передбачають художні ліцензії: ігровий продукт оплачується лише клієнтом, а AFAIK - лише кілька двигунів, які здаються досить хорошими для роботи: Hord3d, NeoAxis, blendelf, Panda3D. Але я не можу запевнити, що вони будуть настільки ж простими у використанні, як такі інструменти, як Unity, Torque, C4 та інші; майте на увазі, що ігровий двигун, з графічним рендерінгом, я думаю, що найскладніший тип програмного забезпечення, який ви знайдете в ігрових процесах.


0

Для мене використання Python з Pygame є хорошим рішенням. Можливо, Python трохи повільніше, але для сучасних комп'ютерів, і якщо ви просто намагаєтесь оптимізувати свою гру, це не має значення. Pygame має дуже гарну документацію на оригінальному сайті піггему. Але спочатку візьміть початок підручника, щоб засвоїти деякі основи. Для оптимізації швидкості (перетворення зображень, ...) вам знадобляться інші приклади, які легко знайти.

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