Как бы вы сохранили вид поезда на рельсах сверху с помощью физического движка Box2D?

StackOverflow https://stackoverflow.com/questions/616375

  •  03-07-2019
  •  | 
  •  

Вопрос

Я думаю, было бы забавно смоделировать вид сверху поезда, следующего по рельсам, пересекающего стрелочные переводы и так далее, используя физическую библиотеку, такую как Box2D.Какие соединения и моторы мне понадобятся, чтобы это сработало?

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

Это было полезно?

Решение

Я полагаю, что без "реального" было бы проще физика, как движение мяча таких игр, как Luxor или Tumble Bugs. Значение: пусть поезд следует за сплайном, который определяется рельсами.

Использование phyiscs, вероятно, является излишним, чтобы заставить поезд следовать по пути, и может привести к всевозможным нежелательным побочным эффектам, включая резкое движение, сход поезда с рельсов, застревание поезда на перекрестках и т. д.

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

Другие советы

Почему вы беспокоитесь о том, чтобы сохранить его "на плаву"?Куда это все денется?Гравитация должна удерживать его на низком уровне, пересечение объектов должно поддерживать его на высоком, и поэтому единственные направления, о которых вам нужно беспокоиться, - это вперед и назад.Вот тут-то и включается мотор, и все готово.Остальное - декорации.

В ответ на редактирование проблемы:

Боковые ограждения.И сделайте поезд достаточно длинным / жестким по сравнению с его шириной, чтобы вы могли перемещаться по переездам (сделайте их ближе к прямым углам, чтобы свести к минимуму проблемы с пересечением.

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

Тем не менее, как насчет размещения чего-то вроде шарнирного соединения на поезде и вагонах и двигателя на локомотиве. Скользящее соединение может нуждаться в особой реализации; Вы, вероятно, хотите управлять поездом вдоль сплайна, а не отрезка прямых линий, верно?

Какой-то шаровой шарнир соединит машины вместе.

Реализация не такая уж сложная, и за несколько часов я смог создать прототип чего-то, что выполняет основную работу.Потребуется много работы, чтобы обеспечить бесперебойную работу, но по сути это всего лишь "боковые пути".

Будучи нисходящим, вы, очевидно, сначала должны отключить гравитацию в Box2D.Во-вторых, постройте поезд.Относитесь к колесам поезда как к колесам автомобиля, и все внезапно станет намного проще.Для треков у вас есть несколько вариантов:

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

  • Создайте реальные физические рельсы - внешние рельсы (например, боковые), на которые будут натыкаться "колеса" поездов.В этом случае они должны будут иметь плавные изгибы, что может быть очень сложно, учитывая ограниченные ресурсы, которыми вы располагаете (имитация красивой медленной кривой из блоков в Box2D является грубой для процессора)

Тогда просто отпусти свой поезд!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top