Developers BR

Um Blog sobre XNA, SilverLight e CIA.

[Guia do Iniciante Dia #4] Xbox 360 . PC . Zune. Dicas para quem tem dúvidas.

leave a comment »


Olá caro leitor. Era para ter postado mais cedo mas não consegui… O bom é que o prazo ainda está sendo seguido à risca já que ainda não é dia 16/07 =D

Agora vamos falar do que abordaremos hoje. Hoje nós vamos falar sobre as diferenças na hora de desenvolver para Xbox360, Zune e PC.

Assuntos como: posso distribuir normalmente serão tratados em um outro dia, se não me engano, no Sétimo =D

Então vamos lá. Eu especificamente adoro quando me dão especificações mas vou também ter que dar alguns detalhes ao invés de uma lista.

A grande vantagem do XNA 3.0 ou superior é o suporte ao desenvolvimento para o Zune, além é claro do Xbox360 e PC Windows.

Mas considerações como memória, tamanho da tela etc devem ser levadas em conta ao desenvolver par adiferentes plataformas.

Vamos listar por partes caracteristicas das 3 plataformas citadas.

Começando pelo…

PC

O PC tem vantagem ao usar o teclado e o mouse, já que com isso você ganha uma infinidade de teclas para seus jogos.

Mas eu odeio jogos que usam combos complexos no PC já que as teclas não são alfabetizadas e sim “QWERTYzadas” =P

As resoluções mais utilizadas atualmente são:

800×600

1024×768

Outras resoluções são utilizadas mas em menor escala do que as de cima. Isso implica em um ponto negativo para o PC: a falta de padrão na resolução, ou pelo menos algo mais limitado. Isso é problema para posicionar objetos 2D já que um indicador de vida que fique posicionado, por exemplo, no canto inferior direito da tela teria que ter um código que reajustasse sua posição dependendo do tamanho da tela.

Creio que é por isso que a maioria dos indicadores ficam em Cima, no canto superior esquerdo já que ali o reajuste é nulo.

Mas tal problema é quase inutil perante o XNA, já que ajustando algumas configurações do graphicsDevice e caso queira, colocando o jogo em FullScreen o monitor se ajusta à resolução escolhida. Então nem chega a ser um ponto negativo.

Mas o problema principal é o poderio das máquinas. Tem gente que tem 512mb de RAM mas outras tem 4GB, alguns usuarios tem placa com PixelShader 2.0 outros com 4.0.

E isso é um problema já que devemos manter o FPS (Frames Por Segundo) em 60 até nas mais humildes máquinas (o que não é tarefa muito fácil).

PS: Humildes no ponto de vista do XNA significa as máquinas que possuem o mínimo para rodar. É claro que devemos nos esforçar mas não podemos sacrificar um importante recurso diferencial de um jogo só para ele rodar em máquinas mais humildes.

XBOX360

Um dos principais diferenciais do XNA é que ele permite desenvolver para um console de next-gen. Mas não é apenas um mar de rosas.

Algumas considerações devem ser levadas em conta, mas começemos pelas vantagens:

Hardware Unico: O interessante é que o hardware é unico, então quer dizer que se no seu Xbox360 de testes seu jogo roda com FPS 60 então no Xbox360 do seu comprador final o jogo irá rodar com FPS em 60.

Agora os pontos negativos:

– O HD do Xbox360 é mais lento que um HD de um PC então o Loading de um jogo irá demorar um pouco mais.

– Você pode sofrer problemas com o Garbage Collector. Falo sobre isso em um outro Post, já que é um assunto vasto. Mas o problema se resume em: no PC seu jogo roda normal mas no Xbox360 o FPS cai drasticamente.

Agora alguns mais simples de resolver:

O Controle é diferente (óbvio não?) ao invés do teclado e mouse usa-se apenas o controle. Então ao ter um projeto que tenha como alvo o PC e o Xbox360 os controles devem ser adaptados do teclado para o controle ou vice-versa.

Lembre-se: Qualquer código de suporte À Mouse ou Keyboard deve ser retirado do projeto para Xbox360!

Agora um erro comum ao se converter um projeto é o de esqueçer de tirar o código que muda o Titulo da janela, já que não há janela no Windows e outro erro é o de não levar em consideração as…

Configurações da tela no Xbox360

Este assunto é muito importante, então preste atenção! Observe a tabela abaixo:

Tipo de Tela

Resolução (LarguraxAltura)

AV

640×480

480p(Comum)

640×480

480p(Widescreen)

640×480

720p(Widescreen)

1280×720

1080i ou 1080p (Wide)

1920×1080

Como pode notar, dependendo do tipo de Televisão que rodar seu jogo a resolução muda.

Title Safe Area

Gosto mais de chamar deste modo mas acho que pode ser traduzido como “Area visivel da tela”.

Algumas televisões, especialmente as tipo “cubo” se é que posso dizer assim, não formam um retangulo mas sim um quadrado. Observe:

televisores

Isso significa que as televisões que formam um quadrado irão esconder uns 10% da tela. Seja em cima ou dos lados ou talvez em baixo. Isso é meio que muito variavel, mas felizmente o XNA nos dá uma “colher de chá” dando para gente o membro TitleSafeArea que faz parte da classe Viewport.

Este membro retorna um retangulo que representa a parte visivel da tela.

Isto já é a solução já que com isso podemos fazer como o exemplo:

O problema

Você precisa colocar o medidor de vida à uma distancia de 10,10 px do canto superior esquerdo independente do televisor que está sendo usado.

Para isso use o seguinte:

spriteBatch.Begin();

spriteBatch.Draw(textura, new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + 10, GraphicsDevice.Viewport.TitleSafeArea.Y + 10), Color.White);

spriteBatch.End();

Tudo o que fazemos no código acima é definir a posição como o ponto X e Y visivel na tela mais 10 pixels.

Acho que deu para entender né?

Agora falta mais um.

Zune

Zune é o player da Microsoft que tenta competir com o iPod.

Não há muita coisa a dizer, já que é um aparelho móvel sua CPU e GPU são mais lentas. Então cuidado ao manipular imagens grandes demais.

Especificações:

Tamanho da Tela: 240×320 (quando na vertical) ou 320×240 (quando na horizontal)

Seu teclado também é diferente. Veja a imagem:

zuneInterface

Agora vamos explicar o que a imagem quer dizer. Os botões do Zune e seus estados podem ser acessados através da classe GamePad que é a mesma do Xbox360.

Segue os códigos de verificação:

// Para verificar o botão Back

if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)

// Para verificar o botão B

if (GamePad.GetState(PlayerIndex.One).Buttons.B == ButtonState.Pressed)

// Para verificar o botão A

if (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)

Os Zunes da 1º Geração Mapeiam o botão do meio com a classe DPad, então para verificar a direção do botão nos Zunes de 1º Geração usa-se o seguinte:

// Verificar para Cima

if(GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed)

// Verificar para Esquerda

if (GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed)

// Verificar para Baixo

if (GamePad.GetState(PlayerIndex.One).DPad.Down == ButtonState.Pressed)

// Verificar para Direita

if (GamePad.GetState(PlayerIndex.One).DPad.Right == ButtonState.Pressed)

Já os Zunes da 2º Geração mapeiam o botão como se fosse o Left Stick do controle do Xbox360. Veja como verificar:

// Botão A

if (GamePad.GetState(PlayerIndex.One).Buttons.LeftStick == ButtonState.Pressed)

// Horizontal

if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X != 0)

if(GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X == –1) // Esquerda

else if(GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X == 1) // Direita

// Vertical

if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.Y != 0)

// Mesma lógica

O método usado nos Zunes de 1º geração também podem ser usados nos da Segunda geração, caso preferir.

OBS: O ThumbSticks.Left.X e Y variam entre –1, 0 e 1.

Conclusão

Apesar de alguns assuntos ficarem vagos, creio que este tutorial esteja bem explicativo.

Espero que aproveite!

Até a próxima!

Anúncios

Written by rafaelangeline

julho 15, 2009 às 10:18 pm

Publicado em Tutoriais, XNA

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: