Me deparei com essa pergunta quando estava projetando um videogame em c #.
Se considerarmos jogos como Battlefield ou Call of Duty , centenas ou até milhares de balas estão voando ao mesmo tempo. Os eventos são acionados constantemente e, pelo que sei, isso consome muito poder de processamento ... ou é? Quero saber como vários desenvolvedores de jogos gerenciam marcadores (2D e 3D) e qual é o método mais eficiente para cada um.
Eu li a pergunta Como as balas são simuladas nos videogames? mas não toca em como os marcadores funcionam da perspectiva do design do programa.
Eu tive algumas idéias, mas cada uma tem suas desvantagens:
O método mais eficiente que eu consegui pensar (para jogos 2D):
Digamos que eu criei uma classe chamada Bullet e, por quanto tempo o usuário mantenha pressionado um botão, a cada 0,01 segundo, um objeto Bullet será criado. Este marcador possui:
1 velocidade
2 Posição inicial de onde está sendo filmado
3 textura de Sprite
4 Um efeito ao acertar
Como a bala seria de sua própria classe, poderia gerenciar os ouvintes de desenho, movimento e ação.
Não seria difícil para o processador processar milhares desses objetos sendo instanciados e depois destruídos (quando o efeito de ativação é acionado)? Espaço RAM?
Método eficiente para jogos em 3D - Outro pensamento que tive foi:
Digamos que eu crie uma classe de armas. Essa arma possui vários recursos, alguns dos quais:
1 Detecte onde a arma está apontando e determine se está olhando para um alvo
2 Acione uma animação do disparo da arma
3 Possui um método doDamage () que indica algo para subtrair a saúde de qualquer coisa que a arma apontar
4 Notifica uma classe de animação de marcadores quando o botão é pressionado
Eu poderia criar uma classe estática, por exemplo, BulletAnimation, que poderia receber notificações de onde está a arma que a acionou, para onde está apontada (para o destino da bala) e informações sobre um sprite e velocidade apropriados para usar na bala. . Essa classe então desenha sprites (talvez em um novo segmento, idk) com base nas posições e no sprite desejado, para simular uma bala sendo disparada de uma arma.
O último parece muito mais difícil de codificar, e não seria necessário muito poder de processamento para chamar constantemente a estática para fazer isso por milhares de marcadores por vez? Obter atualizações constantes nas posições inicial e final também seria difícil.
Minha pergunta é: qual é a maneira mais eficiente de os criadores de jogos fazerem isso? Esse método muda de jogos 2D para 3D?
pew-pew-pew
tecnologia :)