Как реализовать разрушаемую местность в стиле червяков в XNA? - PullRequest
19 голосов
/ 18 января 2010

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

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

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

Ответы [ 4 ]

34 голосов
/ 18 января 2010

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

РЕДАКТИРОВАТЬ - исходная ссылка для второго урока была нарушена, поэтому я сделал ссылку на ее архивную версию.

7 голосов
/ 18 января 2010

Riemer имеет аналогичный подход к игре, которую он разработал в XNA, снаряды из пушек приводят к «разрушению» местности, и любые реквизиты, которые ранее были на этой местности, перемещаются соответствующим образом.и улучшен для ваших нужд, но это только начало.

Riemer предлагает хороший выбор учебников и для других вещей.

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

4 голосов
/ 18 января 2010

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

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

Вот два примера, которые основаны друг на друге, как сделать это с помощью пиксельных шейдеров в 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/

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

...