MVC (Model-View-Controller) Архітектура ігрового двигуна - так чи ні? [зачинено]


18

Я читаю одну чудову книгу « Кодування ігор завершено» , і ця книга настійно рекомендує використовувати підхід MVC (Model-View-Controller) з трьома ключовими шарами:

  1. Шар додатків для ігор
  2. Логіка гри
  3. Перегляд гри

Мені такий підхід виглядає як надмірне значення для мобільної комп’ютерної гри.

Яка ваша думка, будь ласка? Чи варто реалізовувати цю архітектуру, навіть якщо вона додає додаткову комунікацію, необхідну між модулями? Чи може ця конструкція споживати стільки потужності процесора, що, врешті-решт, результат буде значно повільнішим, ніж якби він не був реалізований?


5
-1 і голосувати за закриття. Все, що варто сказати про MVC в іграх, було сказано на сайті gamedev.stackexchange.com/questions/3426/… , і поки що у нас все є сміття.

@Joe Wreschnig, це досить суворо, але, мабуть, правда ...
Виступає

@chaos: Насправді я проголосував за вашу відповідь, але насправді нам не знадобилася інша відповідь, що сказала "використовуйте шаблони, якщо вони допомагають, не робіть, якщо вони не роблять". Або, можливо, ми це зробили, але тоді це все ще дуже сумно. Я все ще не знаю, як посилатися на такі вирази, як "Запуск конструкцій, як спадщина", окрім сміття.

2
@Joe: О, дякую. :) Аргумент того, що OOP є безцінним, дещо затуляє розум. Я вважаю, що за певним стандартом нам не потрібні такі пункти, як повторення моїх, але ноуби трапляються, і це, безперечно, дублює питання. Він також виконує функцію відпускання запізнілих користувачів на сайт, як я, зішкріб невеликий репрез, незважаючи на те, що активність масово зникла. :) Я маю на увазі, чорт, у мене є 40K повторень на SO, але тут я навіть не можу редагувати вікі з тегами.
хаос

Відповіді:


30

Я дещо підтримую використання структури MVC навіть для простої мобільної гри. Якщо нічого іншого, це допомагає з проблемою, яка набридає розробникам, які не вкусили її достатньо разів: відокремлюючи код відображення від логіки гри.

Я також скажу, що потрібно пам’ятати, що MVC, як і всі шаблони дизайну, існує, щоб полегшити ваше життя . Це означає, що якщо в будь-який момент часу перебування в якомусь наборі правил щодо того, що слід і чого не слід робити, коли користуватися MVC, ускладнює ваше життя, ігноруйте це . Відбудеться одна з двох речей: 1) вас покусають пізніше, і тоді ви зрозумієте, чому це робити по-іншому, в першу чергу, насправді полегшило б ваше життя в перспективі, або 2) жодних наслідків.

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


Шановний Хаос, мені найбільше подобається ваша відповідь, тому я відзначаю це як відповідь на моє запитання. Підхід MVC додає абстракцію в розробку коду. Абстракція звичайно додає додаткові кроки коду, яких можна уникнути при більш прямому дизайні. Як я правильно зрозумів, мені не потрібно турбуватися про витрати, внесені абстракцією, доданою в результаті проекту MVC.
Bunkai.Satori

1
Хороша відповідь, +1 на це .. Теорія - це все добре і добре, але це може призвести до того, що ігри не будуть відправлені, якщо ви просто цього не зробите.
Джеймс

@ Bunkai.Satori: Це додає абстракції, і IMO - корисна абстракція, яка платить своїм шляхом. Я згоден з останнім твердженням, з тим уточненням , що там є вартість, і що я не думаю , що вам потрібно турбуватися про це.
хаос

4

Конструкції часу компіляції не споживають процесорної потужності, якщо у вас є неймовірно безглуздий компілятор. Об'єктно-орієнтована мова або підхід не відрізняється за характеристиками виконання, ніж процедурна. Ви не користуватиметесь додатковими накладними витратами на використання MVC. Модульність існує в час компіляції, а не під час виконання, коли код вкладений та оптимізований, він взагалі не матиме ніякої різниці.

Багато сучасних ігор реально керують моделями та переглядами окремих розділів і отримують великі переваги від продуктивності на більшості платформ.

В кінцевому рахунку, MVC хороший дизайн , який отримує ви збільшили зміст і менше помилок і т.д. для безкоштовно . Немає причин не використовувати його. Це як запитати, чому ви повинні використовувати forцикл замість рукописних gotos. Якщо ви не маєте вищого дизайну на увазі, це, звичайно, краще, ніж нічого.

Редагувати: Конструкції часу компіляції не споживають енергії процесора. Очевидно, такі проекти, як виконання, як спадкування.


-1. MVC - це проектно-часове рішення. Спадщина - це проектно-часове рішення. Обидва відбуваються до моменту компіляції та часу виконання. Обидва мають великий вплив на продуктивність. Вбудовування не завжди робить код швидшим. Ваша пропозиція про нарізку неймовірно наївна. Нічого не вільне.

Дякую DeadMG за вашу відповідь. В основному, я маю на увазі, що з кожним рівнем абстрагування код стає похилим, оскільки додається все більше проміжних кроків. MVC - це більш абстрактний дизайн, який, швидше за все, призведе до більше кроків для досягнення того ж завдання. Це впливало б на швидкість, imo.
Bunkai.Satori

4

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

Отже, маючи на увазі, я пропоную, що MVC варто реалізовувати заради вас як ігрового програміста . Ваш код буде краще дотримуватися об'єктно-орієнтованих принципів, особливо інкапсуляції , і ви, швидше за все, матимете набагато простіший час його збереження (виправлення помилок або додавання нових функцій).

З іншого боку, переконайтеся, що насправді закінчите гру і не витрачаєте стільки часу на роботу над «двигуном», щоб це ніколи не було зроблено.

Для отримання додаткової інформації, будь ласка, прочитайте питання "Чому MVC & TDD більше не використовуються в архітектурі ігор?" і моя справді довга відповідь.


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

Привіт Рікет, дякую за пояснення yoru. Це звучить дуже логічно. DeadMG, ну, з одного боку ви праві, з іншого боку, я думаю, що підхід OO додає більше бітів інформації у складений код, ніж процедурна мова. Цей додатковий біт коду, пов'язаного з ОО, робить отриманий код повільнішим. Ви згодні?
Bunkai.Satori

3
Зараз зараз ... Впевнений, що простий рядок у вигляді C ++ a++буде таким самим, як і a++у C (де aпримітивний тип тощо) тощо. Але розглянемо простий клас C ++ з віртуальною функцією, яка щось робить, віртуальна функція вимагає значного накладного та простого функцій C, навіть якщо внутрішній код ідентичний. Об'єктно-орієнтовані мови мають накладні витрати . Вибачте за те, що явно сказали "швидкість". Якщо додаткове розподілення пам'яті та подібне не призводить до повільнішої програми, то ви абсолютно правильні.
Ricket

2
Якщо функція віртуальна, це означає, що програмі потрібно вибирати між двома різними версіями тієї ж функції під час виконання. (Інакше ви не зробили б це віртуальним.) У цьому випадку у вас в будь-якому випадку є додатковий умовний рівень або рівень непрямості, який вам доведеться реалізувати самостійно на процедурній мові (наприклад, через вказівник функції або оператор переключення) . Це не накладні витрати - це суттєво для проблеми.
Килотан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.