Estou tendo problemas para entender o design de jogos. Na plataforma Android, tenho uma atividade e defino sua visualização de conteúdo com uma visualização de superfície personalizada. A vista de superfície personalizada atua como meu painel e eu crio instâncias de todas as classes e faço todo o desenho e cálculo lá.
Pergunta: Em vez disso, devo criar as instâncias de outras classes na minha atividade?
Agora, crio uma classe de thread personalizada que lida com o loop do jogo.
Pergunta: Como uso essa classe em todas as minhas atividades? Ou tenho que criar uma instância separada da classe de thread estendida a cada vez?
No meu jogo anterior, eu tinha vários níveis que precisavam criar uma instância da classe thread e na classe thread tive que definir métodos construtores para cada nível separado e, no loop, use uma instrução switch para verificar qual nível ele precisa renderizar e atualização. Desculpe se isso parece confuso.
Eu só quero saber se o método que estou usando é ineficiente (o que provavelmente é) e como proceder para projetá-lo da maneira correta. Eu li muitos tutoriais por aí e ainda estou tendo muitos problemas com esse tópico em particular. Talvez um link para alguns tutoriais que explicam isso? Obrigado.
fonte
OpenGL ES
você, deve saber que o renderizadorOpenGL ES
já possui seu próprio encadeamento e, nesse caso, não precisa criar e iniciar manualmente um novoThread
eRunnable
para esse sistema.Normalmente, seu ciclo de jogo é independente em uma única atividade.
ao alternar Activity, você pausa / mata seu loop de jogo. As atividades separadas devem corresponder à pausa do jogo de qualquer maneira (por exemplo, porque você mudou para uma atividade "enviar email para amigos" ou "menu principal")
Para níveis extras, você não deve criar ou destruir novos threads ... a menos que tenha mudado para um "nível completo, carregando o próximo nível, aguarde" Atividade, e precisará reiniciar o "jogo principal" "Atividade de qualquer maneira. Mas mesmo nesse caso, você não está realmente criando threads "extras", está apenas criando um thread nessa atividade e matando / reiniciando / matando / reiniciando sequencialmente ... etc essa atividade. cada vez que um nível é concluído.
fonte
Se você entende alemão, este tutorial é muito bom.
Para o idioma inglês, eu posso recomendar este tutorial
Em relação à classe de encadeamento: não sei se é realmente necessário que você possa fazer referência a todas as classes em seu aplicativo. No meu jogo, resolvi assim:
A classe responsável por desenhar a GUI principal possui um método de renderização substituído. Nesse método, é chamada uma classe de encadeamento que atualiza todos os elementos da GUI e processa as entradas do usuário.
O thread também é responsável por manter uma taxa de quadros constante. Dependendo do jogo que você está desenvolvendo, isso pode ser importante.
fonte