Когда я должен использовать физический движок? [закрыто]

12

Так как я обнаружил Box2D , я использую его для любого игрового приложения, которое я пытаюсь написать, от очень маленьких прототипов или небольших программ для тестирования чего-либо до реальных проектов.

Благодаря этому так ужасно легко справиться с чем угодно - от столкновений до реальной физики.

Иногда, однако, у меня есть некоторые сомнения по этому поводу: если мне нужно только обрабатывать круги или AABB, и мне не нужны продвинутые физические инструменты (соединения или тому подобное), я думаю, что физический движок может добавить что-то большое, ненужные накладные расходы.

Чтобы переформулировать мой вопрос: вы бы использовали Box2D (или другие физические движки) в игре, где физика действительно проста (например, Super Mario)? И если нет, то почему?

peoro
источник
2
Делай то, что кажется правильным. Как вы думаете, вашей игре нужен физический движок? Как вы думаете, Марио выиграет от Box2D? Новейший Mario, конечно, имеет приятные ощущения с хорошей физикой, но он не чувствует ничего похожего на то, что я видел в Box2D.
Джефф
@Jeff: Это зависит от того, если вопрос "Когда я должен использовать Box2D?" или «Когда я должен использовать физический движок?». Новый Mario, безусловно, содержит физический движок.
1
@Joe Wreschnig: Да, но есть ли случай, когда физический движок не используется? Только время, которое я могу придумать, будет текстовым приключением или указанием и нажатием. Я думаю, это зависит от того, насколько вы хотите определить физический движок
Джефф
@Jeff: Немногим (не физическим) играм-головоломкам нужна одна, например, Tetris, Bejeweled. В экшен-играх я могу утверждать, что большинство двумерных shmups не извлекают выгоду из физического движка, поскольку они обычно просто нуждаются в проверках наложения AABB / круга, никакой реакции на столкновение, абсолютно фиксированных траекторий движения и постоянной скорости. Платформеры, однако, все о физике.

Ответы:

8

Если память, дисковое пространство, усилия по разработке или процессорное время, используемые для Box2D, слишком велики для ваших целей, не используйте их. В противном случае, нет причин избегать этого, если вы сочтете это полезным.

Грегори Эйвери-Вейр
источник
2
Это все, к чему это действительно сводится. Если это облегчает вашу жизнь и не блокирует вас от платформ, которые вы хотите, это победа, даже если вы не используете ее части.
1
Или, другими словами - «Единственная причина, по которой изобретать велосипед - это научиться изобретать велосипед».
Exilyth
4

Что-то такое же простое, как у Super Mario, нет, так как на самом деле не так много физики (Марио не влияет на физику другого объекта при прыжках)

если вы используете физику в смысле нескольких предметов (более одного), используя физику для воздействия на результат других объектов, то я бы использовал движок.

Призраки
источник
С другой стороны, у Марио есть импульс, ускорение, переменный размер и направленное столкновение, и все это вы получаете «бесплатно» с помощью физического движка, а не просто ограничивающие проверки перекрытия.
Я согласен - я думаю, что большую часть времени физический движок даст вам много вещей, которые будут потратить немного времени на самореализацию.
Кристофер Хоренштейн
3
Правда, всегда лучше не изобретать колесо, я просто нахожу, что если я хочу просто колесо, я не собираюсь брать проект автомобиля. Кроме того, вы узнаете больше о вашей игре в целом, и вам будет легче изменить / изменить физику.
Призраки
1
Это действительно ужасная аналогия. Это больше похоже на то, что вам нужны колесо и оси, а может быть, рулевая колонка и мотор, но, возможно, нет приборной панели или стеклоподъемников.
3
кто не хотел бы электростеклоподъемники?
Призраки
2

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

Кристофер Хоренштейн
источник
3
Тем не менее, можно сказать, что выяснение того, как реализовать и использовать Box2D, заняло бы больше времени, чем создание простой физики. (хотя я предполагаю, что это зависит от степени использования физики)
Spooks
1
@Spooks: я не могу представить ничего «проще», чем Box2D, который все еще полезен.
Я полностью согласен с Джо здесь; просто нет замены полезности, которая приходит вместе с использованием Box2D. Я не могу представить, что могу написать что-то, что будет отвечать вашим потребностям быстрее, чем научиться создавать некоторые приборы и определять гравитацию с помощью Box2D.
Кристофер Хоренштейн
1

Если «физика» в игре проста, нет необходимости импортировать физический движок.

Я свободно использую термин физика, так как есть разница между моделированием физики и моделированием физики. Очень важная вещь для дифференциации.

Например, в Mario Bros. при запуске и остановке вы будете немного скользить. Подумайте, как вы могли бы это реализовать.

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

но стоит ли это того? Вы можете симулировать тот же эффект, уменьшая скорость игроков, когда они не двигаются ...

Что-то вроде:

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

Разница в том, что одна физика, а другая нет. Есть плюсы и минусы для обоих. Но, как правило, для простых игр подделать его гораздо проще.

aaronfarr
источник
1
Такая физика грубая. Если вы собираетесь подделать его, то можете сделать так, чтобы он выглядел красиво. трение = 0,9 или некоторое число ниже 1. speedX * = трение; скорость Y * = трение;
AttackingHobo
2
Конечно, по окончании проекта это превращается в «если (нажатие клавиши движения и не движется, и на льду, и не под водой, и у вас есть это специальное усиление, и вы не едете в багажнике и ...)».
@AttackingHobo: Суть поста не в том, чтобы создать хороший скользящий алгоритм. Он иллюстрирует разницу между симуляцией и моделью.
aaronfarr
@Joe: Это всего лишь модификации вашей переменной трения ... возможно, вам и @AttackingHobo стоит поболтать: P С помощью физического движка вы должны определить свойства для каждого объекта в игре. Я хочу сказать, что подключение физического движка для простых игр не должно быть автоматическим. Это ситуативный.
aaronfarr
1
@aaronfarr: нет никакой разницы между симуляцией и моделью; для этих целей они являются синонимами. Все, что вы показали, это то, что изолированная часть игрушечной модели / симулятора меньше кода, чем вся Box2D.
0

Вы должны решить в зависимости от ситуации

Плюсы, использующие ваш собственный движок

  • Программное обеспечение под контролем (без изменений в связи с новым выпуском)
  • Подходит для вашей игры (только те функции, которые вам нужны для вашей игры, так, как вам нужно)
  • Гибкость (любая безумная динамика, которую вы хотите, может быть закодирована, любая будущая функция не будет зависеть от двигателя)
  • Опыт обучения (может быть, однажды вам нужно улучшить двигатель, и вам нужно как его построить)
  • Меньше изучения и программирования для простых функций (иногда, чтобы сделать что-то с движком, может потребоваться глубокое понимание его структуры .. и может быть не достойно)
  • Более высокая производительность для простых функций (для простых конкретных функций вы можете получить более высокую производительность, чем с двигателем общего назначения)
  • Меньше памяти (объект и код могут занимать гораздо меньше места и памяти, когда используются только необходимые функции)

Плюсы готового физического движка:

  • Может адаптироваться к новому оборудованию и новой ОС без особых усилий
  • Меньше изучения и программирования для сложных функций
  • Более высокая производительность для сложных функций
Дмитрий Огнибене
источник