Pergunta

Se você fizer uma arquitetura de jogo que se divide componentes do sistema (IE, tornando, física, lógica, de entrada, scripting, etc) em diferentes tópicos, como você lida com casos onde a comunicação em tempo real é necessário?

Por exemplo, se um script quer desenhar uma caixa na tela, seria ideal fazer isso quando a problemas de processamento de componentes de um "FrameDrawn" de eventos para que a caixa seria desenhado na parte superior da tela, no final de cada quadro desenhar. Como isso é possível se o componente de script eo componente de renderização estão em segmentos diferentes uns dos outros?

Foi útil?

Solução

O que a maioria dos jogos vai ter é uma pilha enorme de dados e vários tópicos referentes a algum subconjunto desses dados, conforme necessário. A comunicação entre os tópicos raramente é explícita e mais comumente é implícita, feito através de uma alteração nos dados causadas por um fio e notei mais tarde por um segundo segmento. As mudanças são protegidos por semáforos, semáforos, ou outras primitivas de sincronização de baixo nível.

Para o seu exemplo de desenho, o fio scripting mudaria alguns dados no componente GUI ea linha de renderização, da próxima vez que torna o GUI, veria que novos dados e desenhar a caixa de conformidade.

Tenha em mente, porém, que a maioria dos desenvolvedores de jogos não enfiar coisas bastante tanto como é no seu exemplo, em parte porque é difícil fazer isso de forma eficaz com um modelo que compartilha tantos dados e baseia-se em baixo o bloqueio em nível de correção. Idealmente mais desenvolvedores de jogos iria avançar para um modelo que compartilha menos dados, mas que é difícil devido às exigências de resposta apresentação em tempo suave real.

Outras dicas

Normalmente o fio de renderização é o único a já desenhar coisas na tela. No entanto, desde tópicos podem se comunicar, é possível para dizer o segmento de scripting para contar o fio de renderização "Ei, eu quero desenhar uma caixa próximo quadro."

A forma como a nossa comunicação alças do projeto da linha é em uma das duas maneiras. Para algo que é editado de forma dinâmica - listas de objetos, veículos em movimento, et cetera, criamos um mutex que bloqueia os dados quando ele está sendo alterado. Se o processador quer desenhá-lo, mas o segmento de atualização está excluindo esse objeto, o processador terá que esperar. Para outras coisas, como o ui, só temos sinalizadores globais que estão escritas pelo segmento ui, e lido pelo processador, por isso não mutex é necessária.

O que você está pedindo não é realmente possível, razão pela qual a regra geral é ter apenas um segmento. Se outro segmento quer mostrar algo na tela, ele deve enviar uma mensagem para o segmento interface do usuário, que irá mostrar a mensagem quando ela é renderização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top