2D-платформер XNA C#

Я пытаюсь сделать (придумать, как...) двухмерный платформер в XNA.

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

Я читал, что Braid использует не плитки, а фрагментированные изображения или что-то в этом роде, как вы выполняете обнаружение столкновений на них? и это лучше, чем использование плитки?


person Restart    schedule 09.02.2010    source источник


Ответы (4)


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

http://www.box2d.org/ http://code.google.com/p/box2dx/

Эта библиотека даст вам возможности обнаружения столкновений и физики.

person xgalaxy    schedule 09.02.2010
comment
использование физической библиотеки для простого обнаружения столкновений для вашего главного героя в игре-платформере, как правило, плохая идея. Требуются огромные усилия, чтобы настроить его и сделать его движение и ощущение правильным. Такие игры, как Марио, не являются физически правильными, и поэтому играть в них гораздо приятнее. Это не означает, что он ведет себя и подчиняется некоторым правилам (например, главный герой падает из-за гравитации), просто он запрограммирован так, чтобы чувствовать себя правильно, а не физически правильно. - person Toad; 09.02.2010
comment
Box2D и Farseer Physics, как упомянуто ниже, являются очень простыми физическими API. На самом деле они настолько просты, что я бы сказал, что для создания физически обоснованного мира с ними потребуется меньше строк кода, чем для собственного обнаружения столкновений. Даже для простого 2D-платформера. - person xgalaxy; 09.02.2010
comment
проблема с физикой (опять же) заключается в том, что требуется время, чтобы все исправить. Все возможно, что интересно для некоторых игр, но обычно вы не хотите, чтобы главный герой мог взаимодействовать и использовать все. Игры, основанные на физике, быстро становятся своего рода играми в стиле симуляции, в то время как игры plqtform гораздо более прямолинейны в аркадном стиле. Это не означает, что они используют физические вещи для определенных элементов, но это определенно не означает, что все моделируется. - person Toad; 09.02.2010
comment
Это правда, и один человек, которого я знаю, который собрал платформер из Farseer, должен был немного перенастроить движок, чтобы получить разумное поведение. Получилось, но долго. - person RCIX; 09.02.2010
comment
@reinier и RCIX Что лучше использовать? физический движок или столкновение плитки? и что сейчас используют платформеры, такие как New Super Mario Bros. Wii, например? Я знаю, что в старых платформерах использовалось столкновение тайлов, верно? - person Restart; 09.02.2010
comment
@restart: если вы новичок, просто начните с столкновения плиток. Посмотрите, как далеко это вас заведет. Все до того, как 3D стало мейнстримом, использовало «простое» столкновение на основе тайлов. (Так что такие игры, как туррикан, старый марио, суперлягушка и т. д.). Таким образом, вы можете пройти долгий путь. - person Toad; 09.02.2010
comment
Хорошо, я планировал сделать тайловую игру, но когда я узнал, что есть другие способы сделать платформер, я больше не знал, что использовать. Теперь я продолжу создавать свою игру с плитками, хотя мне все еще любопытно, что использовал Braid, если бы это была не игра с плитками. - person Restart; 09.02.2010
comment
@restart: вместо того, чтобы делать плитки в обычной сетке, вы можете использовать «плитки», которые расположены где угодно (поэтому они в основном имеют положение X, Y). Столкновение будет сложнее, так как оно больше не основано на сетке. Вам нужно выяснить (быстро), на какой графике вы стоите. Один из способов сделать это — использовать другую схему разделения пространства, такую ​​как Quadtree en.wikipedia.org/wiki/Quadtree Это также понадобится вам, чтобы быстро определить, какие «плитки» выводить на экран (что также намного проще при использовании сетки). - person Toad; 09.02.2010
comment
@restart: легко потеряться во всех вариантах. Вот почему рекомендуется просто начать «легко» и использовать тайловую карту. К тому времени, как закончится ваша первая игра, у вас будет достаточно опыта, чтобы перейти к другим схемам. - person Toad; 09.02.2010

Если вы предпочитаете ретро-стиль, то, безусловно, можно использовать плитку! Однако, если вы хотите что-то более «современное», вы можете использовать более традиционный физический движок. Farseer Physics — отличный движок, и несколько человек использовали его для создания платформеров. Он основан на Box2D и подобных движках, но предлагает более простой API и несколько уникальных функций (например, текстуру для геометрии), и я сам могу засвидетельствовать его привлекательность, немного поэкспериментировав с ним.

person RCIX    schedule 09.02.2010

Вероятно, вам нужно немного больше, чем обнаружение столкновений, для такой игры, как Braid. Я бы предположил, что вам также нужен физический движок. Я бы порекомендовал вам взглянуть на движок Farseer Physics, который представляет собой 2D-движок, который очень хорошо работает с XNA. . Он поддерживает ряд различных методов обнаружения столкновений.

person Brian Rasmussen    schedule 09.02.2010
comment
Спасибо, посмотрю фарсир. - person Restart; 09.02.2010
comment
Сейчас я смотрю на farseer, судя по образцам, он выглядит хорошо, но я не могу заставить работать обнаружение столкновений между двумя геомами. Я создал PhysicsSimulator, 2 тела, 2 геометрии, и теперь 1 тело падает из-за гравитации. проблема в том, что он падает прямо через другое тело. - person Restart; 09.02.2010
comment
@Restart: Вы просмотрели все демоверсии? Существует множество примеров обнаружения столкновений. - person Brian Rasmussen; 09.02.2010

Вы проверили примеры из серии столкновений в клубе создателей XNA, в частности, пиксель- столкновение образец?

person Paolo Tedesco    schedule 09.02.2010
comment
В платформере вам действительно не нужно точное обнаружение столкновений пикселей. Это будет означать, что если главный герой анимируется, то иногда (например, из-за того, что его рука торчит) он натыкается на стену, а затем снова анимируется, и он все еще может пройти 2 пикселя. Что вы обычно делаете, так это определяете либо несколько полей столкновений, либо невидимую форму эллипсоида вокруг персонажа и используете это как область столкновения. - person Toad; 09.02.2010
comment
@reinier: Я писал 2D-игры-платформеры, в которых столкновение между героем и плитками не было идеальным по пикселям, но столкновение между объектами (например, шарами) и плитками было идеальным по пикселям, а между объектами и героем тоже было идеально по пикселям. Так что это может быть сложнее, чем отсутствие идеального столкновения пикселей. :) - person SyntaxT3rr0r; 09.02.2010
comment
@wizardofodds: Это явно может быть выбор. Мне самому больше нравится, если игра немного снисходительна. Так что мой главный герой не умрет мгновенно, если его левая ноздря случайно заденет ноготь врага. Хотя компьютеры могут быть идеальными по пикселям, зрение игроков обычно не так... поэтому обычно вы допускаете некоторое перекрытие спрайтов. - person Toad; 09.02.2010