Como criar efetivamente padrões de marcadores

8

Atualmente, estou criando um jogo de tiro de cima para baixo como Touhou. O fator mais importante do jogo é que existem muitos padrões e maneiras diferentes pelas quais as balas são geradas e disparadas contra o jogador, veja este vídeo: http://www.youtube.com/watch?v=4Nb5Ohbt1Sg#start=0 : 60; final = 9: 53 ;

No momento, estou usando a classe "Pattern", que possui uma série de etapas para mover e fotografar. No entanto, sinto que esse método é bastante trabalhoso, pois tenho que criar um novo padrão para cada ataque e talvez novas classes de bala que implementem um determinado comportamento.

Essa pergunta recebeu um comentário sugerindo que eu deveria procurar no BulletML a fácil criação e armazenamento de marcadores com um padrão específico. Parece decente, mas me levou a pensar: que outras soluções você tem que eu devo levar em consideração?

Atualizar

Meu design atual é o seguinte:

Diagrama UML

Um exemplo de um padrão implementado:

Meu GigasPattern executa primeiro um teleporte que move Alice para um determinado ponto (X, Y) na tela. Depois que isso é concluído, o padrão começa a usar o Mover para mover o sprite (enquanto o teletransporte tem efeitos e animação separados). Estes não são de interesse, na verdade, pois são bastante simples.

O Shooter também cria vários ataques, que são classes novamente que o Shooter pode usar para criar vários padrões de balas, muito parecido com o da pergunta que eu postei. Quando o Mover atinge seu destino, ele e o atirador param e retornam ao estado inativo. O padrão é concluído, é removido pela IA e um novo é escolhido.

IAE
fonte

Respostas:

4

Vai ser trabalhoso, não importa como, criar um nível como esse pareça uma tarefa fácil, e pode não ser tão difícil, mas sempre levará muito tempo. (Uma estimativa aproximada: 1000 vezes o tempo de reprodução de algo tão legal quanto esse vídeo.)

Se você usa uma linguagem de script, ainda precisa escrever exatamente o mesmo código, apenas em uma linguagem diferente, a vantagem é que você pode criar níveis de script sem mexer no código compilado. Se você trabalha em uma grande equipe, definitivamente deseja isso, mas como desenvolvedor único, geralmente não faz grande diferença.

O BulletML não é uma resposta em si; você precisa de uma implementação funcional em seu idioma, que deve interagir com o resto do seu jogo. E ainda há um trabalho enorme de escrever todos esses arquivos XML.

Estou inclinado a dizer que você deve continuar programando os padrões desejados nas classes, mas talvez possa revelar alguns exemplos de sua estrutura atual, pode haver melhorias a serem feitas.

Edit:
Pode haver uma realização que poderia simplificar um pouco as coisas e fornecer uma caixa de ferramentas um pouco melhor. Você pode descrever uma IA como sendo um padrão; idealmente, deve haver apenas um tipo de entidade, mas qualquer entidade pode optar por chamar outra entidade do mesmo tipo para realizar o trabalho. Isso livrará você de todos os limites de quão profundo você pode aninhar a propagação de responsabilidade e dará a você um tipo de classe a menos em que pensar.

Pelo menos é o que recolho no diagrama. Embora você deva limitar a quantidade de código que você inclui em uma pergunta, nunca há um substituto completo para a visualização de algum código real.

aaaaaaaaaaaa
fonte
Claro, obrigado pela ajuda. Incluí um diagrama UML simplificado do meu design atual, bem como um exemplo de aplicativo do design em ação. Espero que ajude!
IAE
2

Talvez você possa implementar uma linguagem de script pequena e própria para o seu jogo. Então você seria capaz de criar um script de comportamentos de marcador apenas adicionando novos scripts. A vantagem de uma linguagem de script própria é que você pode usá-la em outras partes do seu jogo. Ou você pode tentar usar Lua (não sei qual idioma / estrutura você está usando). Mas, na minha opinião, Lua seria um exagero se você quiser apenas ter padrões de movimento.

Entre: eu já fiz isso para um shooter espacial, mas para o comportamento do inimigo. Funcionou bem, então você realmente pode tentar isso.

M0rgenstern
fonte
Estou usando o AS e ele não se presta muito bem ao uso de recursos locais, no entanto, o uso de uma linguagem de script ou XML pode ser útil para mim, então obrigado pela sugestão.
IAE
2

Eu estava exatamente na mesma situação há um tempo atrás e comecei a implementar minha própria arquitetura para padrões de marcadores. Desisti, porém, porque me deparei com uma implementação do BulletML para C # / XNA: BulletML C #

Eu tive que fazer algumas alterações, mas agora a criação de padrões que parecem espetaculares é realmente muito fácil. Há uma ótima demonstração aqui que mostra como algumas linhas de XML podem criar padrões impressionantes.

Se você estiver trabalhando em C #, recomendo evitar reinventar a roda. Especialmente se você quiser ter padrões muito complexos. Pode levar algum tempo para entender o BulletML, mas, na minha opinião, vale a pena.

No entanto, se você decidir não usar o BulletML, verifique, pelo menos, o código C # e tenha uma idéia de sua arquitetura. Pode lhe dar algumas idéias.

pek
fonte
Obrigado! Comecei a me afastar do ActionScript para este projeto e agora estou escrevendo em C # / XNA. Definitivamente vou dar uma olhada no código, obrigado.
IAE