Qual é a melhor abordagem para criar um personagem 2D para poder usar toneladas de equipamentos diferentes quando em ação?

14

Eu quero criar um jogo 2D, mas eu gostaria de ter o personagem para usar toneladas de equipamentos diferentes em diferentes combinações, como um RPG ou algo assim.

Então, digamos que o usuário troque de ombros e calças, isso deve ser mostrado ao jogador e todos esses equipamentos diferentes devem seguir a ação dos diferentes personagens (bater, ser atingido, soletrar magia etc.).

Vejo alguns problemas que eu gostaria de conhecer a melhor abordagem / algoritmo / arquitetura para resolver.

1 - Sprites ou Animações

Devo criar sprites diferentes para cada equipamento em cada animação de ação?

É melhor ter o equipamento sprite e animá-lo diretamente no código, como rotação e tradução (usando algo como interpolação no Flash)?

Existe alguma outra opção melhor? (Eu realmente não gosto das idéias acima)

2 - Posições

Digamos que durante um dos movimentos do personagem, ele começa a olhar diretamente na frente da visão do jogador, mas termina seu movimento mostrando o lado direito do jogador (como se ele balançasse a espada de um lado para o outro).

Se considerarmos uma parte do usuário, como a cabeça, por exemplo, ela começa na frente e depois vira à esquerda.

Significa pelo menos 3 posições diferentes para cada equipamento principal (capacete, boné, o que for).

Isso certamente influencia a resposta da pergunta nº 1. Como é a melhor maneira de conseguir isso?

3 - Camadas

Vamos considerar um movimento de personagem em que ele gira 360 graus com os braços abertos. No início da animação, sua mão direita está próxima da visão do usuário e, no meio do movimento, isso provavelmente está por trás do corpo do personagem na animação.

Qualquer que seja a opção na pergunta nº 1, você certamente precisará usar algum tipo de modelo de camada para fazer com que esse sprite ou animação comece mais perto da visualização do jogador e depois mude para longe da visualização do jogador.

Existe alguma boa maneira de fazer isso?

Eu sei que a pergunta é bastante longa e difícil de entender. Deixe-me saber se você acha que é melhor ter alguns desenhos para tentar explicar qual e eu vou tentar fazer isso.

homemdelata
fonte
Em que nível você pretende que sua arte esteja? Como pixel art retrô? Ou esses sprites em HD, se você tiver alguma arte existente que realmente me ajude a personalizar minha resposta.
Jesse Dorsey
Oi Noctrine. Na verdade, estou considerando isso como uma questão "independente de arte". Tentarei desenhar algumas explicações ainda este fim de semana para facilitar a compreensão. Obrigado
homemdelata

Respostas:

8

Eu acho que parece que você está procurando um sistema de animação esquelética 2D, talvez? Infelizmente, não conheço nenhum sistema de prateleira para isso, já que ele foi substituído pela tendência dos jogos 3D-gfx-mas-2D.

coderanger
fonte
+1 É muito mais fácil fazer isso se você apenas tornar o personagem em 3D.
knight666
mas para "jogo 3D-gfx-mas-2D", eu precisaria considerar uma das soluções mencionadas de qualquer maneira, caso contrário, precisarei de um sprite para qualquer combinação de itens, por exemplo, a mesma peça de peito com 10 aparelhos diferentes peças irão gerar 10 animações :(
homemdelata 23/07
Na verdade, você só tem pontos de fixação no esqueleto e pode colocar o que precisar.
Coderanger
2
Eu criei uma biblioteca de animação esquelética 2D simples (de código aberto) para o XNA, incluindo um editor decente. Confira youtube.com/user/srekel#p/a/u/0/46LIoFNdG_4 e youtube.com/user/srekel#p/a/u/1/8sYkeu5k7XE
Srekel
Esta é quase a resposta correta. Na verdade, você me fez descobrir que o que estou procurando é um sistema esquelético 3D para animação 2D. Eu preciso encontrar algoritmos para que (se houver algum)
homemdelata
8

Como Zorba diz, a maioria dos jogos retrô não fez isso especificamente porque você precisaria (com sprites) de ter animações de vários quadros para cada peça de equipamento.

Algumas alternativas "preguiçosas":

  • Troque a paleta de marchas em vez de fazer sprites totalmente diferentes.
  • Desenhe o personagem de forma que as únicas partes do corpo que animam sejam as que não estão ligadas à arte. Por exemplo, se o personagem puder usar apenas uma armadura de qualquer maneira, faça-o um Capacete e você estará livre para animar o corpo inteiro enquanto mantém a cabeça imóvel.
  • Use um único sprite para o personagem na tela principal do jogo, mas mostre o equipamento em uma sub-tela com um retrato estático. Então você não precisa se preocupar com animação.
Ian Schreiber
fonte
2

Em jogos antigos como a série Ultima, eles de fato desenhavam uma peça de equipamento em cada pose de personagem possível. A oclusão seria tratada não puxando a engrenagem (se a luva esquerda estiver atrás do sprite do jogador, você não precisa se preocupar com isso) ou apenas puxando a engrenagem na ordem inversa.

Obviamente, isso exigia muito trabalho e, como resultado, havia relativamente poucas peças de equipamento exclusivo, com muitas versões trocadas e modificadas por paleta desse equipamento.

Em um jogo moderno, eu recomendo fortemente fazer personagens em 3D. Se você deseja arte com aparência 2D ou sua plataforma não tem a potência do 3D real, é provável que seja melhor modelar tudo em 3D, renderizar e depois ajustar o resultado final manualmente.

Como alternativa, se você decidir que não precisa de ajustes, não tem potência para o 3D completo, mas não deseja enviar uma enorme biblioteca de sprites, pode empacotar os modelos 3D e renderizá-los em uma textura em tempo real, quando souber o modelo está prestes a aparecer no jogo.

ZorbaTHut
fonte
O mesmo que mencionei na outra resposta é considerável aqui: eu precisaria considerar uma das soluções que menciono de qualquer maneira, caso contrário, precisarei de um sprite para qualquer combinação de itens, por exemplo, a mesma peça no peito com 10 peças de aparelho diferentes irá gerar 10 animações :(
homemdelata 23/07
2
Você compõe o "sprite final" em tempo de execução. Você não tem um sprite para "o jogador"; uma lista de sprites que são renderizados para cada quadro de animação. Portanto, se o jogador estiver voltado para a direita, você renderizará "luva esquerda", "braço esquerdo", "personagem do jogador", "botas", "calças", "armadura", "elmo", "braço direito" , "luva direita" em ordem. Então você anima cada peça de equipamento de forma independente, flutuando no ar.
ZorbaTHut
1

Confira o livro de James Da Silva, onde ele explica como fez The Dishwasher: Dead Samurai. Isso mostrará como o KISS pode resolver isso. A sugestão de usar animações esqueléticas em 3D ou 2D é válida e meio no mesmo reino.

Kaj
fonte
Você pode adicionar o link?
Homemdelata
0

Essa é uma ótima pergunta, mas acho que você já respondeu: você precisa de um sistema de ossos 2D que suporte camadas de mudança de ossos, para que diferentes membros possam ficar atrás e à frente um do outro à medida que o personagem gira. Você também precisará desenhar seus sprites de 4 ou 8 ângulos (ou quantos você precisar). Dependendo das habilidades da sua equipe, pode ser mais fácil criar esses recursos em 3D e renderizá-los dos ângulos necessários.

Usar um mecanismo 3D também é uma boa solução, embora isso traga seu próprio conjunto de desafios.

Iain
fonte
Sim, é quase isso. Acabei de receber a outra resposta correta, mas essa também é válida. Como eu comentei sobre o outro, eu preciso de um sistema esquelético 3D para animação 2D :)
homemdelata