Коли я повинен використовувати двигун фізики? [зачинено]


12

Оскільки я виявив Box2D , я використовую його для будь-якої програми, подібної до ігор, я намагаюся писати, від дуже малих прототипів або невеликих програм для тестування чогось, до реальних проектів.

Завдяки цьому так жахливо легко впоратися з чим завгодно - від зіткнень, до фактичної фізики.

Хоча іноді у мене виникають певні сумніви: якщо мені потрібно лише обробляти кола або AABB, і мені не потрібні передові інструменти з фізики (стики чи подібні речі), я думаю, що двигун фізики може додати щось велике, непотрібні накладні витрати.

Щоб відновити моє запитання: чи використовуєте ви Box2D (або інші двигуни фізики) в грі, де фізика справді проста (як, наприклад, Super Mario)? І, якщо ні, то чому?


2
Роби те, що відчуваєш правильно. Як ви вважаєте, ваша гра потребує двигуна фізики? Як ви думаєте, Маріо виграв би від Box2D? Найновіший Маріо, безумовно, має приємне відчуття до нього з приємною фізикою, але він не відчуває нічого подібного до всього, що я бачив, побудованого в Box2D.
Джефф

@Jeff: Це залежить від того, якщо питання "Коли я повинен використовувати Box2D?" або "Коли я повинен використовувати двигун фізики?". Новий Маріо, безумовно, містить двигун фізики.

1
@Joe Wreschnig: Так, але чи є коли-небудь випадок, коли двигун фізики не використовується? Лише час, про який я можу придумати, це буде текстова пригода, або крапка та клацання. Я думаю, це залежить від того, наскільки загально ви хочете зробити своє визначення фізичного двигуна
Джефф

@Jeff: Невелика (нефізична) гра-головоломка потребує такої, наприклад, Тетріс, Бежевель В ігрових діях я можу стверджувати, що більшість 2D-шуму не виграють від фізичного двигуна, оскільки вони, як правило, просто потребують перевірки перекриття AABB / кола, відсутності реакції на зіткнення, абсолютно фіксованих шляхів руху та постійної швидкості. Хоча платформери - це все про фізику.

Відповіді:


8

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


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

1
Або, інакше кажучи, - "Єдина причина винаходити колесо - це дізнання про винахід колеса".
Вихід

4

Щось так просто, як Super Mario ні, оскільки він насправді не має великої фізики. (Маріо не впливає на фізику інших об'єктів своїми стрибками)

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


З іншого боку, Маріо має імпульс, прискорення, змінний розмір та зіткнення в напрямку, які ви отримуєте "безкоштовно" з двигуном фізики, і це не просто прості обмежувальні перекриття.

Я погоджуюсь - я думаю, що більшість часу фізичний двигун дасть вам багато речей, які були б марною тратою часу, щоб реалізувати себе.
Крістофер Горенштейн

3
Щоправда, завжди краще не вигадувати колесо, я просто знаходжу, що якщо я хочу лише колесо, я не збираюся брати креслення для машини. Крім цього, ви дізнаєтесь більше про свою гру в цілому і простіше будете змінювати / змінювати фізику.
Spooks

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

3
хто не хотів би електричні вікна?
Spooks

2

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


3
однак, можна сказати, що для створення простої фізики для розробки способу реалізації та використання Box2D знадобиться більше часу. (хоча, мабуть, це залежить від ступеня використання фізики)
Spooks

1
@Spooks: Я не уявляю нічого "простішого", ніж Box2D, який все ще корисний.

Я тут повністю з Джо; просто немає заміни корисності, яка постачається разом із використанням Box2D. Я не уявляю, як кодувати щось, що швидше задовольнить свої потреби, ніж навчитися створювати деякі світильники та визначати гравітацію за допомогою Box2D.
Крістофер Хоренштейн

1

Якщо "фізика" в грі проста, не потрібно імпортувати двигун фізики.

Я терміново використовую термін фізика, оскільки є різниця між моделюванням фізики та моделюванням фізкультур. Дуже важлива річ для розмежування.

Наприклад, в Mario Bros., коли ви біжите і зупиняєтесь, ви трохи сповзнете. Подумайте, як ви могли це здійснити.

Можна моделювати його, визначивши всі необхідні змінні: напр. маса, сила тяжіння, коефіцієнт корисної дії від тертя, тяги тощо, а потім обчислення нової швидкості, прискорення тощо.

але чи варто того? Ви можете імітувати той же ефект, зменшуючи швидкість гравців, поки вони не рухаються ...

Щось на зразок:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

Різниця одна - це фізика, інша - ні. У обох є плюси і мінуси. Але, як правило, для простих ігор підробити це набагато простіше.


1
Така фізика є грубою. Якщо ви збираєтеся підробити це, можливо, це також зробить це красивим. тертя = .9 або деяке число нижче 1. speedX * = тертя; швидкість Y * = тертя;
AttackingHobo

2
Звичайно, до кінця проекту він перетворюється на "якщо (натискання клавіші руху і не рухається, і на льоду, і не під водою; у вас є це спеціальне підключення, і ви не їдете в черевику і ...)".

@AttackingHobo: Повідомлення не в тому, щоб створити приємний алгоритм ковзання. Потрібно проілюструвати різницю між імітацією та моделлю.
aaronfarr

@Joe: Це лише модифікації вашої змінної тертя. Моя думка, що підключення фізичного двигуна для простих ігор не повинно бути автоматичним. Його ситуативний.
aaronfarr

1
@aaronfarr: Не існує різниці між моделюванням та моделлю; для цих цілей вони є синонімами. Все, що ви показали, - це те, що відокремлена частина іграшкової моделі / імітації менше коду, ніж усього Box2D.

0

Ви повинні вирішити відповідно до ситуації

Плюси використання власного двигуна

  • Програмне забезпечення під контролем (без змін через нову версію)
  • Підходить для вашої гри (лише ті функції, які вам потрібні для гри, в тому, як вони вам потрібні)
  • Гнучкість (будь-яка шалена динаміка, яку ви хочете, може бути закодована; будь-яка майбутня функція не покладається на двигун)
  • Досвід навчання (можливо, одного дня вам потрібно вдосконалити двигун, і вам потрібно, як його скласти)
  • Менше вивчення та програмування простих функцій (іноді щось робити з двигуном може знадобитися глибоко зрозуміти його структуру .. і може бути не гідним)
  • Більш висока продуктивність для простих функцій (для простих конкретних функцій ви можете отримати більш високу продуктивність, ніж для двигуна загального призначення)
  • Менше пам’яті (об’єкт і код може зайняти набагато менше місця та пам'яті, коли використовуються лише необхідні функції)

Плюси позашляхового фізичного двигуна:

  • Може адаптуватися до нового обладнання та нової ОС без особливих зусиль
  • Менше вивчення та програмування складних функцій
  • Більш висока продуктивність для складних функцій
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.