Подтвердить что ты не робот

Как реализовать разрушаемый ландшафт Worms в XNA?

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

Я собираюсь создать ландшафт в стиле "червяков", с обнаружением столкновений для игрока, который бродит и прыгает по туннелям. Примеры этого типа динамического ландшафта можно увидеть на этих рисунках. Example 1 Example 2

Мой вопрос: как лучше всего реализовать этот тип разрушаемой местности? Я использую игровую студию XNA.

4b9b3361

Ответ 1

Там есть хороший код внизу этот поток. Кроме того, это - это пошаговое руководство по достижению разрушаемого ландшафта.

EDIT - Исходная ссылка для второго учебника была сломана, поэтому я связан с ее архивной версией.

Ответ 2

Ример имеет аналогичный подход к игре, которую он разработал в XNA, ракеты-пушки приводят к "разрушению" местности, и любые реквизиты, которые были ранее на указанной местности, перемещаются соответственно.

Его нужно реорганизовать и улучшить для ваших нужд, но это начало.

У Римера есть хороший выбор учебников для других вещей.

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Adding_craters.php

Ответ 3

Есть две возможности, один из них работает, но он зависит от XNA, насколько легко реализовать:

  • Как и другие предложили, растровое маскирование. Вы сохраняете растровое изображение всех "наземных" пикселей и всех "воздушных" пикселей. Если у вас есть гравитация; персонаж не может проваливаться сквозь землю, а он может падать через воздух.
  • Векторная геометрия. Вы начинаете с прямоугольной "земли" и держите список "удаленной" земли, которая создает воздух. Эта геометрия очень проста в редактировании: просто добавьте круг или похожий на список и обновите графику. Я не знаю, имеет ли XNA векторные и формы способности; но это должно быть легко создать геометрию с этими двумя вещами, а затем применить текстуру или подобное. Кроме того, это может быть легко оптимизировано, сохраняя кешированную версию визуализированного ландшафта и обновляя только кеш-рамку недавно добавленного "воздуха". Это решение требует еще немного математики.

Ответ 4

Вот два примера, которые основаны на том, как это сделать с пиксельными шейдерами в XNA 4. Оба примера включают в себя sourecode.

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shaders/

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shader-and-rendertarget2d/

Выполнение этого с помощью пиксельных шейдеров очень быстро, так как весь тяжелый подъем выполняется на gpu.