Essas etapas que você menciona provavelmente são executadas em mecanismos separados. É que os mecanismos de jogo simples geralmente os têm de uma só vez. Sua sequência
for each object
do physics
do game logic
draw
torna-se
call physics subsystem
call game logic subsystem
call drawing subsystem
O Physics Engine cuida de posições e tamanhos.
O Game Logic Engine cuida da interpretação do que o Physics Engine mudou (ele pode obstruir alguns pontos de referência ...), quais objetivos os personagens têm e qual comportamento eles devem estar executando , ele executa scripts agendados (este pensamento função de ).
O Drawing Engine desenha quais objetos são visíveis e ele sabe quais objetos são visíveis porque os mecanismos do Quake meio que trapaceiam aqui (consulte a seção Draw).
Meu conselho para você é estudar melhor como as simulações são feitas, em vez dos mecanismos de jogo. Existe uma enorme cultura pop relacionada ao desenvolvimento de jogos e os mecanismos de jogos são feitos em linguagens imperativas (por causa da tradição e velocidade); então foi mais esclarecedor para mim obter bons livros didáticos (em vez de teoria) e ENTÃO olhar para os motores (prática) do que olhar para os motores e os quebra-cabeças por horas como eles fizeram isso.
Física
A noção completa de iterar todas as entidades e {pensar, desenhar} provavelmente levará a problemas. Haverá conflitos e assim por diante. Acredito que a Valve tenha Havok e acho que Havok cuida da física correta o suficiente.
Pensar
A função Think é executada quando um tempo em um jogo é igual ao tempo no nextthink . Funciona dessa maneira no mecanismo Quake, e o mecanismo Quake é a base dos mecanismos Half Life. NÃO é executado todas as vezes.
Internamente, deve ser uma iteração simples através de uma lista de entidades e verificar se já passou o tempo para chamar a função think. A complexidade do tempo será O (N), onde N é o número de entidades.
Se houver um número muito grande de entidades, você deve medir quanto melhorará os fps. Observe que, devido à lei de Amdahl , é uma aceleração potencialmente invisível. Quero dizer, você apenas percorre todos os itens e diminui e verifica um número.
Eu o aceleraria classificando entidades pelo nextthink (crie uma lista de ponteiros para entidades e classifique-a sempre; não uma matriz de entidades, porque as entidades podem alterar seu nextthink a qualquer momento, portanto, reorganizá-las na matriz leva O (N) em vez de O ( 1) na lista).
Você também deve consultar o planejador O (1) no Linux .
Desenhar
Motor desenha o que é aproximadamente visível da área em que a câmera está. O nível do jogo é particionado em uma árvore e uma área é a folha dessa árvore. Não vou incomodá-lo com detalhes sobre isso ... Então, se uma entidade é visível, ela é colocada em um conjunto de entidades visíveis e elas são desenhadas.
Eles armazenam quais áreas são áreas potencialmente visíveis. É chamado de "conjunto potencialmente visível", PVS, para abreviar. Há visualização do PVS , a cápsula verde é o jogador e ao seu redor é renderizado o que o seu PVS contém.
<some commercial engine>
isso acontece?