Как эффективно создавать паттерны маркеров

8

В настоящее время я создаю шутер сверху вниз, как Touhou. Самый важный фактор игры заключается в том, что существует множество разнообразных шаблонов и способов создания пуль и стрельбы по игроку, см. Это видео: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; конец = 9: 53 ;

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

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

Обновить

Мой текущий дизайн выглядит следующим образом:

Диаграмма UML

Пример реализованного шаблона:

Мой GigasPattern сначала выполняет телепорт, который перемещает Алису в определенную точку (X, Y) на экране. После этого шаблон начинает использовать Mover для перемещения спрайта (тогда как телепортирование имеет отдельные эффекты и анимацию). На самом деле это не имеет значения, поскольку они довольно просты.

Стрелок также создает различные Атаки, которые снова являются классами, которые Стрелок может использовать для создания различных патронов, очень похожих на тот, что был в вопросе, который я опубликовал. Как только Движитель достиг цели, и он, и стрелок останавливаются и возвращаются в неактивное состояние. Шаблон завершается, удаляется ИИ и выбирается новый.

IAE
источник

Ответы:

4

Это будет трудоемко, несмотря ни на что, создание такого уровня кажется легкой задачей, и это может быть не так уж и сложно, но это всегда займет много времени. (Очень приблизительная оценка: в 1000 раз больше времени для воспроизведения чего-то такого же крутого, как это видео.)

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

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

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

Изменить:
Может быть одна реализация, которая может немного упростить вещи, и дать вам немного лучший набор инструментов. Вы можете описать ИИ как шаблон, в идеале должен существовать только один тип сущности, но любая такая сущность может выбрать для вызова другую сущность того же типа. Это избавит вас от любых пределов того, насколько глубоко вы можете вкладывать средства распространения ответственности, и даст вам один класс для размышлений.

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

AAAAAAAAAAAA
источник
Конечно, спасибо за помощь. Я включил упрощенную UML-диаграмму моего текущего дизайна, а также пример приложения дизайна в действии. Я надеюсь, что это помогает!
IAE
2

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

Между: я сделал это уже для космического шутера, но для поведения врага. Это сработало хорошо, так что вы действительно можете просто попробовать это.

M0rgenstern
источник
Я использую AS, и он не слишком хорошо подходит для использования каких-либо локальных ресурсов, однако использование языка сценариев или XML может быть полезным для меня, так что спасибо за предложение.
IAE
2

Я был в точно такой же ситуации некоторое время назад и начал реализовывать свою собственную архитектуру для шаблонов маркеров. Я сдался, потому что наткнулся на реализацию BulletML для C # / XNA: BulletML C #

Я должен был сделать несколько изменений, но теперь создавать шаблоны, которые выглядят эффектно, действительно просто. Существует большое демо здесь , который показывает вам , как, несколько строк XML, можно создавать удивительные узоры.

Если вы работаете над C #, я настоятельно рекомендую избегать повторного изобретения колеса. Особенно, если вы хотите иметь очень сложные шаблоны. Может потребоваться некоторое время, чтобы обернуть голову вокруг BulletML, но, на мой взгляд, оно того стоит.

Однако, если вы решите не использовать BulletML, то, по крайней мере, взгляните на код C # и получите представление о его архитектуре. Это может дать вам некоторые идеи.

пекин
источник
Спасибо! Я только начал отходить от ActionScript для этого проекта и сейчас пишу его на C # / XNA. Я обязательно посмотрю код, спасибо.
IAE