Multiplayer tutorial 1: Conceitos

3

Index

Tagged

Contributors

Stats

23,808 visits, 37,316 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 14 Aug, 2015. Last updated 25 Feb, 2019

Como muitos jogadores podem juntar-se o mesmo jogo?

O limite de quantos jogadores podem participar de um jogo é provável que seja a largura de banda de upload no host. O motor em si não impõe nenhum limite, mas não há limite prático definitivo que será encoutnered.

O problema é que o anfitrião tem de enviar uma mensagem com os dados para N jogadores, a cada um dos jogadores N. Por exemplo, se o hospedeiro tem de enviar 16 bytes de dados para cada jogador, em seguida, cada mensagem terá um tamanho de cerca de 16 * N, e, em seguida, que a mensagem deverá ser enviada N vezes. Isso cria um requisito de largura de banda N-quadrado . Por exemplo:

10 jogadores = 16 x 10 x 10 = 1600 bytes por atualização

20 jogadores = 16 x 20 x 20 = 6400 bytes por atualização

30 jogadores = 16 x 30 x 30 = 14400 bytes por atualização

...

100 jogadores = 16 x 100 x 100 = 160000 bytes por atualização

Mesmo que a contagem jogador aumenta linearmente, a exigência de largura de banda aumenta proporcional ao quadrado. Isso significa que mesmo com um servidor significativamente mais poderoso ou menos dados necessários per-jogador, ele não vai te dar muitos jogadores extras.

Por padrão as atualizações são enviadas 30 vezes por segundo, de modo que o último exemplo com 100 jogadores que realmente necessitam de uma taxa de upload de cerca de 5 megabytes / segundo (ou 40 megabit / segundo). Isso é muito alta para uma conexão de casa, mas não necessariamente um servidor dedicado.

No topo do que o anfitrião precisa de ser capaz de executar o jogo por um grande número de jogadores, bem como, a realização de tarefas como testes de colisão com compensação de lag, que podem ser de grande intensidade do CPU. Em seguida, ele pode precisar de ser tornar o jogo para o anfitrião se eles são um participante também. Geralmente, a quantidade total de trabalho aumenta rapidamente com o número de jogadores, e, embora isso depende do jogo específico e conexão, é raro para chegar perto de 100 jogadores em um jogo.

Controlling A formatos de atualização

É possível escolher o formato de valores tansmitted pelo motor multijogador dados exatos. Usado corretamente isso pode reduzir significativamente a quantidade de largura de banda necessária, sem ter qualquer efeito significativo sobre a precisão gameplay. Isso ajuda a tornar o jogo fazer um uso mais eficiente da rede, bem como provável o aumento do número máximo de jogadores que podem participar.

Se você não estiver familiarizado com bits, bytes e binário, em seguida, ele foi coberto extensivamente em outros lugares. Considere começar com os seguintes artigos da Wikipédia em [números binários] [5] e [byte] [6]. Em suma, todos os números em computação são armazenados em binário: cada dígito só pode ser um 0 ou um 1. Um byte é de 8 bits, e pode, portanto, armazenar 2 ^ 8 (256) valores diferentes, ou de 0 a 255. Mais bytes permite uma maior gama de valores a serem armazenados. Tipos de ponto flutuante também pode armazenar valores fracionários, como 0,3, e geralmente requerem pelo menos quatro bytes.

Os tipos que você pode usar em Construct 2 são:

Alta (duplos, 8 bytes) : a [dupla precisão número de ponto flutuante] [7] que pode armazenar números sem afetar a sua precisão. Tem cerca de 15-17 dígitos significativos de precisão. No entanto é preciso 8 bytes para armazenar um único número, o que pode acabar aumentando os requisitos de largura de banda de forma significativa. Na prática, isso é pouco provável que seja uma escolha necessária.

Normal (float, 4 bytes) : a [precisão simples número de ponto flutuante] [8] que pode armazenar números fracionários com cerca de 6-9 dígitos significativos de precisão. Isso significa que alguns números será arredondado para menos dígitos significativos. No entanto, geralmente, é muito mais prático do que uma dupla, uma vez que ele só tem metade do número de bytes e dígitos além do primeiro 6 são geralmente sem importância (ex 0,333333 é perto o suficiente para 0,333333333333333 para fins práticos).

Low (int16, 2 bytes) : um inteiro de 16 bits assinado que só pode armazenar números inteiros na faixa -32.768-32.767.

Muito baixo (uint8, 1 byte) : um inteiro de 8 bits sem sinal de que só pode armazenar números inteiros na faixa de 0 a 255.

Para minimizar a largura de banda, é importante escolher o menor precisão possível que não vai afetar seriamente gameplay. Por exemplo X e Y posições muitas vezes pode usar baixa (int16) precisão. Enquanto a disposição é menor do que 32767x32767 (o que é muito grande), e as posições de subpixel não são importantes para a jogabilidade (uma vez que este irá arredondar qualquer valor fraccionai), é perfeitamente suficiente e usa quatro vezes menos do que a largura de banda de um duplo .

O baixo (int16) e (uint8) precisões muito baixas são úteis com entradas jogador para colegas para enviar para o host. Usando o setbit , getbit e togglebit expressões em Construct 2, é possível definir bits individuais nestes números. Se um jogo usa as quatro teclas de setas para mover ea barra de espaço para atirar, estes são apenas cinco controles, e podem ser armazenados em 8 bits com um 0 indicando "não sendo pressionado" e um 1 a menção «sendo pressionado '. Em seguida, o anfitrião pode olhar para cada bit e simular os controles apropriados. Isso tudo pode ser feito com um único byte, ou um int16 se você tiver mais de oito controles, fazendo uso muito eficiente da largura de banda. Da mesma forma o anfitrião pode enviar para múltiplos pares on / off estados em um único valor.

  • 0 Comments

Want to leave a comment? Login or Register an account!