Network com XNA

636 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
636
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • 02/03/12 22:08
  • Network com XNA

    1. 2. Jogos em Rede com XNA José Antonio “jalf” Leal de Farias Sharpgames
    2. 3. Objetivos <ul><li>Habilitar jogos multiplayer em rede </li></ul><ul><li>Fácil de usar </li></ul><ul><li>Para Xbox LIVE e Games for Windows – LIVE </li></ul><ul><li>Desenvolver com apenas um PC e um Xbox 360 </li></ul><ul><li>Não é necessário servidores dedicados </li></ul>
    3. 4. Características <ul><li>Criação de Partidas online </li></ul><ul><ul><li>LIVE e System Link </li></ul></ul><ul><li>Partidas </li></ul><ul><ul><li>Simples de criar e descobrir </li></ul></ul><ul><ul><li>Gerencia jogadores e fluxo do jogo </li></ul></ul><ul><li>Mensageria simples </li></ul><ul><li>Voz é automaticamente suportado </li></ul><ul><li>Embutido um sistema de simulação de latência e perda de pacotes </li></ul>
    4. 5. Tarefas Típicas <ul><li>Criando uma sessão </li></ul><ul><li>Encontrando e entrando em uma sessão </li></ul><ul><li>Gerenciando os jogadores </li></ul><ul><li>Do Lobby até o Jogo </li></ul><ul><li>Enviar e receber dados </li></ul><ul><li>Terminar o jogo </li></ul>
    5. 6. <ul><li>demo </li></ul>
    6. 7. Nem tudo é tão simples... <ul><li>Programas em rede só são determinísticos se você ignorar o tempo! </li></ul><ul><li>A largura da banda está longe do infinito </li></ul><ul><li>A velocidade da luz é muito baixa! </li></ul>
    7. 8. Os Cinco Estágios dos Jogos em Rede <ul><li>Negação </li></ul><ul><li>Raiva </li></ul><ul><li>Barganha </li></ul><ul><li>Depressão </li></ul><ul><li>Aceitação </li></ul>
    8. 9. NEGAÇÃO
    9. 10. A Técnica do Avestruz <ul><li>Meu jogo é pequeno e simples </li></ul><ul><li>8 Jogadores </li></ul><ul><li>30 fps </li></ul><ul><li>Em cada frame é enviado: </li></ul><ul><ul><li>Posição : Vector3 </li></ul></ul><ul><ul><li>Velocidade : Vector3 </li></ul></ul><ul><ul><li>flagAtirando: bool </li></ul></ul><ul><li>7 x </li></ul><ul><li>30 x </li></ul><ul><li>( </li></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>1 </li></ul></ul><ul><li>) </li></ul><ul><li>= 5.1 k </li></ul>
    10. 11. Custo do Pacote (Header) <ul><li>IP header: 20 bytes </li></ul><ul><li>UDP header: 8 bytes </li></ul><ul><li>LIVE: 16 bytes </li></ul><ul><li>XNA Framework: ~7 bytes </li></ul><ul><li>= ~51 bytes </li></ul>
    11. 12. Dados do Jogo + Headers <ul><li>8 Jogadores </li></ul><ul><li>30 fps </li></ul><ul><li>Em cada frame é enviado: </li></ul><ul><ul><li>Posição : Vector3 </li></ul></ul><ul><ul><li>Velocidade : Vector3 </li></ul></ul><ul><ul><li>flagAtirando: bool </li></ul></ul><ul><ul><li>Header do pacote </li></ul></ul><ul><li>7 x </li></ul><ul><li>30 x </li></ul><ul><li>( </li></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>1 + </li></ul></ul><ul><ul><li>51 </li></ul></ul><ul><li>) </li></ul><ul><li>= 15.6 k </li></ul>
    12. 13. Banda de Voz <ul><li>Dados de voz é ~500 bytes por segundo </li></ul><ul><li>Por default, todos os jogadores podem falar entre si </li></ul>
    13. 14. Dados + Headers + Voice <ul><li>8 players </li></ul><ul><li>30 fps </li></ul><ul><li>Em cada frame é enviado: </li></ul><ul><ul><li>Posição : Vector3 </li></ul></ul><ul><ul><li>Velocidade : Vector3 </li></ul></ul><ul><ul><li>flagAtirando: bool </li></ul></ul><ul><ul><li>Header do pacote </li></ul></ul><ul><li>Dados de voz </li></ul><ul><li>O limite recomendado é 8Kb por minuto </li></ul><ul><li>7 x </li></ul><ul><li>( 30 x </li></ul><ul><li>( </li></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>12 + </li></ul></ul><ul><ul><li>1 + </li></ul></ul><ul><ul><li>51 </li></ul></ul><ul><li>) + 500 ) </li></ul><ul><li>= 19 k </li></ul>
    14. 15. RAIVA
    15. 16. PUTZ! <ul><li>Porque tão pouca banda? </li></ul><ul><li>Meu provedor diz que eu tenho bem mais do que isso! </li></ul><ul><li>Outras aplicações funcionam com bem mais do que isso </li></ul>
    16. 17. Jogos Não Perdoam <ul><li>A Internet é altamente variável </li></ul><ul><li>Os provedores divulgam o melhor caso </li></ul><ul><li>Os Webbrowses se encarregam do fluxo </li></ul><ul><ul><li>Lentidões ocasionais não são problema </li></ul></ul><ul><li>Jogos são limitados pelo pior caso </li></ul><ul><ul><li>Um atraso de 30 segundos arrasa um jogo </li></ul></ul>
    17. 18. BARGANHA
    18. 19. Banda na Xbox LIVE Dados da Bungie Studios coletados durante o beta do Halo 3, em 2007 * A banda é medida em Kilobytes por segundo % de consoles com essa banda ou menor Banda de download (*) Banda de upload (*) 0.1% 2.5 3 0.5% 5 5.5 1% 8 8 2% 9 10 5% 13 15 10% 18 22 30% 25 32 50% 42 (média) 44 (média) 70% 113 115 90% 648 693
    19. 20. Latência na Xbox LIVE Dados da Bungie Studios coletados durante o beta do Halo 3, em 2007 % de consoles com essa latência ou menor Latência entre consoles(ms) 10% 32 30% 57 50% 84 (média) 70% 130 90% 250 95% 320 97% 380 98% 430 99% 540 99.9% 770
    20. 21. DEPRESSÃO
    21. 22. Perda de Pacotes <ul><li>SendDataOptions.None </li></ul><ul><ul><li>Pacotes podem não chegar nunca, ou chegar em uma ordem aleatória </li></ul></ul><ul><li>SendDataOptions.InOrder </li></ul><ul><ul><li>Barato </li></ul></ul><ul><li>SendDataOptions.Reliable </li></ul><ul><ul><li>Caro </li></ul></ul><ul><li>Reliable + InOrder </li></ul><ul><ul><li>Aumento de banda e latência </li></ul></ul>
    22. 23. ACEITAÇÃO
    23. 24. Conheça Seus Limites <ul><li>Banda(kilobytes por segundo) </li></ul><ul><ul><li>Típico: 12 até 250 </li></ul></ul><ul><ul><li>Pior caso: 8 </li></ul></ul><ul><li>Latência (one-way) </li></ul><ul><ul><li>Típica: 25 até 250 ms </li></ul></ul><ul><ul><li>Pior caso: 270 ms </li></ul></ul><ul><li>Perda de pacotes </li></ul><ul><ul><li>Típica: 2% </li></ul></ul><ul><ul><li>Pior caso: 10% </li></ul></ul>
    24. 25. Viva Dentro de Seus Limites <ul><li>Propriedades do NetworkSession </li></ul><ul><ul><li>BytesPerSecondSent </li></ul></ul><ul><ul><li>BytesPerSecondReceived </li></ul></ul><ul><ul><li>SimulatedLatency </li></ul></ul><ul><ul><li>SimulatedPacketLoss </li></ul></ul>
    25. 26. Envie Menos Pacotes <ul><li>Negocie a banda para diminuir a latência </li></ul><ul><li>Envie menos dados por tempo </li></ul><ul><ul><li>Tipicamente 10 a 20 vezes por segundo </li></ul></ul><ul><li>É melhor poucos grande pacotes do que muitos pequenos </li></ul><ul><li>Junção de pacotes automática </li></ul><ul><ul><li>Múltiplos envions após NetworkSession.Update </li></ul></ul><ul><ul><li>Combine em um único pacote </li></ul></ul>
    26. 27. Envie Pacotes Menores <ul><li>Algorítimos de compressão genéricos não são muito bons </li></ul><ul><li>Envie tipos de dados menores </li></ul><ul><ul><li>int -> byte </li></ul></ul><ul><ul><li>Bitfields </li></ul></ul><ul><ul><li>Microsoft.Xna.Framework.Graphics.PackedVector </li></ul></ul><ul><ul><li>Matrix -> Quaternion + Vector3 </li></ul></ul><ul><ul><li>Evite strings! </li></ul></ul>
    27. 28. Envie Menos Dados de Voz <ul><li>LocalNetworkGamer.EnableSendVoice </li></ul><ul><li>Fale apenas com jogadores do seu time </li></ul><ul><li>Fale apenas com jogadores próximos a você </li></ul>
    28. 29. Saiba o que Interessa <ul><li>Algumas coisas importam MUITO </li></ul><ul><ul><li>Morri? </li></ul></ul><ul><ul><li>Quem pegou o Mega-Blaster? </li></ul></ul><ul><ul><li>Quem ganhou? </li></ul></ul><ul><li>Algumas coisas imporam AS VEZES </li></ul><ul><ul><li>Onde eu estou? </li></ul></ul><ul><ul><li>Para onde estou indo? </li></ul></ul><ul><li>Algumas coisas NÃO importam </li></ul><ul><ul><li>Para que lado está indo a fumaça? </li></ul></ul>
    29. 30. Distribua a Carga <ul><li>Jogos para PC são normalmente cliente-servidor </li></ul><ul><ul><li>Reduz o “cheating” </li></ul></ul><ul><ul><li>Concentra a carga na máquina “servidora” </li></ul></ul><ul><li>Xbox LIVE é mais segura </li></ul><ul><li>Peer-to-peer é uma opção viável </li></ul><ul><ul><li>Reduz a latência </li></ul></ul><ul><ul><li>É mais diícil de manter o contexo </li></ul></ul>
    30. 31. Topologias Híbridas <ul><li>Servidor toma importantes decisões </li></ul><ul><li>Peers controlam a parte do movimento </li></ul><ul><li>Mútiplos autorizadores especializados </li></ul><ul><ul><li>Uma máquina controla os powerups </li></ul></ul><ul><ul><li>Outra cuida do score </li></ul></ul>
    31. 32. Convivendo com a Latência <ul><li>Assuma a incerteza </li></ul><ul><ul><li>Você nunca saberá onde um objeto está </li></ul></ul><ul><ul><li>Apenas quando ele for usado </li></ul></ul><ul><ul><li>... e nunca o quão rápido ele se move </li></ul></ul><ul><li>O estado do jogo é apenas uma probabilidade </li></ul><ul><ul><li>O gato está morto ou vivo? </li></ul></ul><ul><li>Cada jogador tem seu próprio universo paralelo </li></ul><ul><li>A meta é manter os universos semelhantes </li></ul><ul><ul><li>Sem pílula vermelha! </li></ul></ul>
    32. 33. Previsão <ul><li>http://creators.xna.com/en-us/sample/networkprediction </li></ul>
    33. 34. <ul><li>Questões? </li></ul>
    34. 35. Obrigado! Contato: [email_address]
    35. 36. http://www.gamefestbrasil.net/ © 2008 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

    ×