Как бы вы держали поезд сверху на рельсах с физическим движком Box2D? - PullRequest
2 голосов
/ 05 марта 2009

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

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

Ответы [ 4 ]

3 голосов
/ 20 марта 2009

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

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

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

1 голос
/ 26 апреля 2009

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

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

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

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

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

1 голос
/ 20 марта 2009

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

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

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

1 голос
/ 05 марта 2009

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

В ответ на редактирование задачи:

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

...