Eventos, postagem x enfileiramento

7

Estou implementando um sistema de mensagens e estou pensando em como devo lidar com eventos. Devo publicá-las e enviá-las aos ouvintes apropriados assim que recebê-las ou devo colocá-las na fila e despachar apenas quando for solicitado (provavelmente pelo loop do jogo principal)?


Editar: Mais informações

Meu jogo é um jogo de plataformas 2D, então o desempenho não será muito difícil de alcançar. Considerando o que Roy T. disse , acho que devo enviar o evento assim que ele for publicado; parece não haver necessidade de enfileirá-lo (a menos que esteja faltando alguma coisa, é claro).

Paul Manta
fonte

Respostas:

3

Nós realmente precisamos de mais informações, mas se você estiver escrevendo um sistema realmente sofisticado, um despachante seria legal, desde então, você pode priorizar eventos (os eventos de rede podem ter uma prioridade mais alta do que os eventos de bate-papo, por exemplo).

No entanto, um despachante real provavelmente será um exagero e pode até tornar as coisas mais lentas por causa da classificação por prioridade e, se você não pensar com cuidado o suficiente, poderá passar fome por eventos de baixa prioridade.

De qualquer forma, com mais informações, podemos adivinhar o que seria melhor.

Editar:

Como resposta para você adicionar informações: não, parece que você não precisa de um despachante adequado :)

Roy T.
fonte
Eu adicionei mais alguns detalhes à minha pergunta.
Paul Manta
5

Convém ter os dois disponíveis e usar o correto para o ouvinte atual. Por exemplo, seu sistema de entidades pode querer saber imediatamente para remover um inimigo, para que não seja atualizado e movido, mas seu sistema de inventário poderá esperar, pois o jogador não poderá usar o item até a próxima quadro de qualquer maneira.

Portanto, ao vincular o evento, o ouvinte deve especificar quando deseja ser atualizado:

  • imediatamente
  • no final do quadro
  • no início do próximo quadro
  • pouco antes da próxima atualização do ouvinte
  • etc
tenpn
fonte
Em um sistema maior, algo assim seria muito bom, mas não acho que a escala do meu projeto atual justifique o tempo que eu precisaria gastar para implementá-lo.
Paul Manta
4
Claro que você sabe melhor o que precisa. Mas você perguntou qual abordagem é a melhor e a resposta é para um limite mínimo de complexidade. Você encontrará situações em que deseja as duas.
tenpn
2

Ouvintes de eventos C # são chamados em ordem de inscrição, imediatamente quando o evento ocorre. Eu faria o mesmo. Estou usando esses no meu jogo 2D, e está funcionando muito bem até agora.

John McDonald
fonte