Detecção de Toques com XNA 4.0

Com a vinda da versão 4.0 do XNA veio também o suporte do XNA ao Windows Phone 7, que será oficialmente lançado nesta segunda-feira(11/10/2010).
image
Uma das novas features mais interessantes é a capacidade de detectar facilmente pontos de toque na tela do dispositivo. A nova API de toques é muito simples de ser utilizada e, para qualquer pessoa que já utilizou as APIs de input do teclado, do mouse ou do gamepad, será um belo Déjà vu.
Para recuperar e utilizar os dados da API de toques, basta utilizar o método estático TouchPanel.GetState() que retorna um objeto do tipo TouchCollection. Este objeto é uma coleção de objetos do tipo TouchLocation. Cada TouchLocation corresponde a um ponto de toque na tela. Lembrando que os dispositivos com Windows Phone 7 devem suportar no mínimo 4 pontos de toque simultâneos.
Cada TouchLocation contêm 3 propriedades úteis: Id, Position e State. A propriedade Id é bem simples, um código de identificação, normalmente um número extenso. Este número é preservado enquanto o ponto existe. Position é um Vector2, com as coordenadas X e Y do centro do ponto de toque. State é uma variável do tipo enumerado TouchLocationState que pode ser:
  1. Invalid: Ponto inválido. O estado só esta Invalid quando você tenta recuperar um estado anterior de um ponto sendo que este ponto acabou de ocorrer.
  2. Moved: Este ponto foi atualizado, mudou de posição, ou pressionado no mesmo ponto.
  3. Pressed: Este ponto é novo, acabou de ocorrer.
  4. Released: Este ponto foi solto, liberado, ou seja, não esta mais sendo pressionado.
É válido lembrar que as APIs de toque do XNA 4 só funcionam para o Windows Phone 7. Não importa se você esta no Windows7, com uma tela multitoque. Se você executar o método TouchPanel.GetState() no Windows ou no XBox360, a API retorna um TouchCollection vazio, sempre! É um stub, ele não faz NADA, apenas retorna o TouchCollection vazio.
O último método interessante da API é o TouchLocation.TryGetPreviousLocation. Este método não é estático. Você o chama a partir de uma instância de TouchLocation passando um parâmetro de saida(out) do tipo TouchLocation. A função retorna neste parâmetro o ponto que ele era anteriormente. Como dito anteriormente, o ponto terá a propriedade State igual a Invalid quando o ponto que chamou a função for um ponto novo, ou seja, State igual a Pressed e o valor da propriedade Id será o mesmo do ponto anterior. O tipo de retorno da função é bool, retornando verdadeiro somente se o ponto que ele retorna no parâmetro de saida é válido.
Com esta configuração de estados e a função TryGetPreviousLocation você consegue descobrir quando um ponto foi criado e quando ele deixou de existir.
Como visto, a API é muito simples de se utilizar. Segue aqui um exemplo de código que testa todas as funcionalidade descritas.
C#
  1. protected override void Update(GameTime gameTime)
  2. {
  3. TouchCollection touchCollection = TouchPanel.GetState();
  4. if (touchCollection.Count > 0)
  5. {
  6. TouchLocation touchLocation1 = touchCollection.First();
  7. TouchLocation touchLocationAnterior;
  8. if (!touchLocation1.TryGetPreviousLocation(out touchLocationAnterior))
  9. {
  10. Debug.WriteLine(“Ponto anterior não existia!”);
  11. }
  12. if (touchLocation1.State == TouchLocationState.Moved && touchLocationAnterior.State == TouchLocationState.Pressed)
  13. {
  14. Debug.WriteLine(“Ponto novo criado(“ + touchLocation1.Position.ToString() + “). ID = “ + touchLocation1.Id.ToString());
  15. }
  16. if (touchLocation1.State == TouchLocationState.Released && touchLocationAnterior.State == TouchLocationState.Moved)
  17. {
  18. Debug.WriteLine(“Ponto não mais presente(“ + touchLocationAnterior.Position.ToString() + “). ID = “ + touchLocationAnterior.Id.ToString());
  19. }
  20. }
  21. base.Update(gameTime);
  22. }
Por hoje é só! Espero que este post tenha tirado as dúvidas de vocês em relação a esta nova API de toques. Em breve irei comentar sobre a API de gestos, que facilita a criação de interfaces naturais ao usuário, como por exemplo Tap, Hold, Flick, Pinch, entre outros.
Obrigado pelo seu tempo e até o próximo post,
Alexandre Z. Chohfi
Anúncios

Escolhendo entre Reach e HiDef no XNA 4.0

Uma das novas features do XNA 4.0 é que agora devemos escolher entre dois profiles de configuração: Reach ou HiDef. Estas pré-configurações foram criadas para facilitar a distribuição de games criados em XNA. Visto que as configurações dos computadores onde o jogo será executado são diferentes umas das outras, os profiles ajudam a selecionar um mínimo de capacidades do hardware que viabilizam a sua utilização.

Por padrão, games criados para Windows e XBox360 utilizam a configuração HiDef, enquanto games criados para Windows Phone 7 utilizam Reach. Projetos criados para Windows Phone 7 NÃO podem ser alterados para a configuração HiDef, devido a limitações do hardware dos dispositivos que executam o Windows Phone 7. Isso não quer dizer que você não possa criar jogos em 3D, ou que os jogos criados em Reach são piores graficamente que jogos criados em HiDef. Entretanto, você pode (e, na minha opinião, deve) alterar a configuração de jogos criados para Windows e XBox360 para Reach.

Reach como o próprio nome já diz, visa “alcançar” a grande maioria dos dispositivos atuais. Se a sua placa de vídeo for antiga, você provavelmente deve usar Reach.

HiDef significa High Definition, ou seja, alta definição. Este profile é para placas de vídeo mais novas.

Se você estiver criando jogos simples, em 2D principalmente, e não utilizar nada muito complexo, provavelmente o seu jogo funciona em Reach. Defini-lo como HiDef apenas inviabilizaria muitos computadores de rodares o jogo, portanto sempre que criar um projeto jogo (Game ou Game library, de Windows ou XBox360) mude o profile para Reach. Se, durante o desenvolvimento, você receber uma exceção indicando que a funcionalidade X não funciona em Reach, ai sim você deve alterar o seu projeto para HiDef, obviamente somente em projetos Windows e XBox360.

Para não deixar a explicação muito superficial, segue uma tabela que indica as limitações de cada profile:

  Reach HiDef
Plataformas Windows Phone 7, Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 9 e no mínimo shader model 2.0. Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 10 (ou equivalente, veja abaixo)
Shader Model 2.0  (mas o Windows Phone não suporta shaders customizados) 3.0+ (o Xbox 360 suporta extensões de shader customizadas como vfetch, que não estão disponíveis para Windows)
Tamanho máximo de texturas 2048 4096
Tamanho máximo de cubmap 512 4096
Tamanho máximo de texturas de volume Não suporta 256
Suporte a texturas com tamanhos não potência de 2 Limitado. Não se pode usar modo de endereçamento wrap, nem mipmaps, nem compressão DXT quando não é potência de 2 Sim
Suporte a cubemaps com tamanhos não potência de 2 Não Sim
Suporte a texturas de volume com tamanhos não potência de 2 Texturas de volume não são suportadas Sim
Número máximo de primitivas desenhadas por chamada da função Draw 65535 1048575
Formato do Index Buffer 16 bits 16 e 32 bits
Formato do elemento de Vertex Color, Byte4, Single, Vector2, Vector3, Vector4, Short2, Short4, NormalizedShort2 e NormalizedShort4 Todos os formatos do Reach mais HalfVector2 e HalfVector4
Formato de texturas Color, Bgr565, Bgra5551, Bgra4444, NormalizedByte2, NormalizedByte4, Dxt1, Dxt3 e Dxt5 Todos os formatos do Reach mais Alpha8, Rg32, Rgba64, Rgba1010102, Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4. Formatos de textura com ponto flutuante não suportam filtragem
Formato de texturas de Vertex Texturas de vértice não são suportadas Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4
Formatos de Render Targets Variavel (veja abaixo) Variavel (veja abaixo)
Render Targets multiplos Não suporta Até 4. Todas devem ter a mesma profundidade de bits. Suporta alpha blending e escrita independente de mascaras por render target
Queries de occlusion Não suporta Sim
Blend com alpha separado (Separate alpha blend) Não suporta Sim
Blend.SourceAlphaSaturation Apenas para SourceBlend, não para DestinationBlend Sim
Número máximo de vertex streams 16 16
Tamanho máximo do stream stride 255 255

 

Lembrem-se que o XNA é desenvolvido em cima do DirectX 9 então, quando digo que para se utilizar HiDef a sua placa de vídeo deve ter suporte ao DirectX 10, não é nem pelo suporte em si mas o profile HiDef, necessita de uma GPU com praticamente as mesmas funcionalidade de um XBox360: MRT, formatos de surfaces com ponto flutuante, vertex tecture fetch, etc, mas no DX9 estas funcionalidades são opcionais. Em teoria, é possível que uma placa de vídeo com suporte somente ao DX9 consiga funcionar para HiDef, mas na prática isso não ocorre, então em vez de falar que HiDef precisa de todas estas funcionalidades na placa de vídeo, é mais fácil dizer que ele necessita de uma placa com DX10.

Você provavelmente vai notar que o suporte aos formatos de RenderTarget ainda podem variar. Agora existe um novo mecanismo de fallback, ou seja, o framework tentará prover o formato pedido, mas, se ele não for suportado, ele escolhe o mais próximo suportado, procurando pelo formato com a profundidade de bits, número de canais, etc, mais similar. Na grande maioria das vezes isso não gera problema algum.

Estes formatos de vertex element, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Rg32, Rgba32, Rgba64, UInt101010 e Normalized101010.

Estes formatos de texturas, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Dxt2, Dxt4, Bgr555, Bgr444, Bgra2338, Bgr233, Bgr24, Bgr32, Bgra1010102, Rgba32, Rgb32, NormalizedShort2, NormalizedShort4, Luminance8, Luminance16, LuminanceAlpha8, LuminanceAlpha16, Palette8, PaletteAlpha16, NormalizedLuminance16, NormalizedLuminance32, NormalizedAlpha1010102, NormalizedByte2Computed, VideoYuYv, Video UyVy, VideoGrGb, VideoRgBg e Multi2Bgra32.

Agora o Game Studio 4.0 mudou definitivamente a ordenação dos bytes dos formatos de cores de BGRA para RGBA. Se você já encontrou com problemas ao fazer isso, saberá facilmente converter o seu código para o XNA 4.0, apenas mudando a ordem dos bytes.

 

Uma das coisas mais importantes é notar que agora o XNA 4.0 não suporta mais placas de vídeo com suporte apenas ao Shader Model 1.1! Apenas Shader Model 2.0 para Reach e 3.0+ para HiDef!

 

Em desenvolvimento para Windows, na maioria dos casos, você só tem que saber que se utilizar HiDef como padrão, você estará limitando o número de usuários capazes de executar o seu jogo, portanto use Reach e, se for indispensável, mude para HiDef.

 

Espero que tenha ajudado. Agradeço muito ao Shawn Hargreaves, especialista do time de desenvolvimento do XNA pelos posts em seu blog que nos informou de todas essas alterações.

Referências:

http://blogs.msdn.com/b/shawnhar/archive/2010/03/12/reach-vs-hidef.aspx

http://blogs.msdn.com/b/shawnhar/archive/2010/07/19/selecting-reach-vs-hidef.aspx

 

Abraços a todos e até o próximo post,

      Alexandre Z. Chohfi

Mobile Game Studios

Microsoft_Game_Studios_logo

A Microsoft Games deu uma ótima notícia. Teremos um novo departamento na Microsoft chamado Mobile Game Studios, que estará sob o comando da Microsoft Game Studios. O objetivo do Mobile Game Studios será desenvolver e encubar jogos para dispositivos mobile, focando principalmente em Zune e Windows Phone 7.

Mais uma vez, obrigado pela atenção,

        Alexandre Z. Chohfi

Como instalar o “Windows Phone Developer Tools CTP” no Windows XP!


Pessoal, procurando na internet eu achei algo muito legal e gostaria de compartilhar com vocês.
Quando o "Windows Phone Developer Tools CTP" foi lançado, fiquei super ansioso para instala-lo no meu computador. Infelizmente não tenho um computador muito bom e ainda utilizo o Windows XP. E não é que eu fui surpreendido novamente!?! O emulador do WP7 necessita do DirectX 10 com um driver WDDM 1.1, nenhum dos quais existem no Windows XP… Deparado com este problema e não querendo gastar em um computador novo que aguentasse o Windows 7, decidi procurar na internet e, como o bom pesquisador que sou (graças a um certo site), encontrei um workaround! É bem simples na verdade, e fiquei espantado que funciona (menos o emulador, é claro)!
Ok, vamos ao que interessa. Primeiro você deve baixar o toolkit neste site:
Windows Phone Developer Tools CTP – April Refresh
Entre no link e baixe o arquivo "VMXvm_web.exe".
Este arquivo é o instalador. Se você tentar apenas executar o programa ele irá abrir mas, em algum passo da instalação, ele irá falar que o Windows XP não é suportado. O XNA em si funciona no Windows XP, o que não funciona é o emulador do Windows Phone 7, infelizmente. Se você não se preocupa com esta falta de funcionalidade siga em frente, caso contrário, este workaround não serve para você e eu recomendo que você instale o Windows 7, no qual o toolkit provavelmente funcionará.
Obs: Lembre-se que mesmo se você estiver no Windows 7, o emulador necessita que a sua placa de vídeo tenha suporte ao DirectX10. Se sua placa for da NVidia, apenas as placas da série GeForce 8xxx ou superior funcionarão.
Após baixar o arquivo, extraia o conteúdo do arquivo executando o comando "vm_web.exe /x" (sem as aspas) no DOS. Quando você executar este comando ele irá pedir uma pasta, que será o local onde os arquivos serão extraídos. Escolha uma pasta qualquer, "temp" por exemplo.
Vá até a pasta onde você extraiu os arquivos e edite o arquivo "baseline.dat" no notepad ou o seu editor de texto preferido. Procure por "[gencomp7788]" (sem as aspas) e, um pouco abaixo disso, mude o valor das variáveis InstallOnLHS e InstallOnWinXP de 1 para 0.
O trecho deve ficar parecido com isso:

[gencomp7788]

InstallOnLHS=0

InstallOnWinXP=0


Salve e feche o arquivo e execute o comando "setup.exe /web" (sem as aspas) no DOS, na pasta em que você havia extraído os arquivos. Agora apenas siga com a instalação normal e pronto! Você acaba de instalar o WP Developer Tools CTP no Windows XP!

Espero que este workaround funcione com vocês como funcionou para mim.

Para quem está curioso para saber em onde eu achei isso, aqui está o site onde eu encontrei este workaround: Windows Phone 7 CTP Windows XP bypass?

Grato novamente pela atenção,
            Alexandre Z. Chohfi

Windows Phone 7 Series!

Bom dia pessoal!

O mercado de Mobile tem
crescido muito recentemente, e a Microsoft não ficou para traz. Vocês
devem lembrar das versões do Windows Mobile (sendo a versão mais nova, a 6.5). Mas ele deixava muito a desejar (se comparar-mos com o iPhone, por exemplo). A poucas semanas, a Microsoft mostrou ao mundo o Windows Phone 7 Series, renomeando e atualizando o antigo Windows Mobile. Não sejam ingênuos achando que o Windows Phone 7 Series é uma atualização para os dispositivos Windows Mobile! O Windows Phone 7 Series é um novo Sistema Operacional que demanda um Hardware especifico para funcionar. A Microsoft já selecionou alguns parceiros para desenvolver o Hardware do WP7, entre eles: Qualcomm, LG, Samsung, Garmin Asus, HTC, HP, Dell, Sony Ericsson, Toshiba e AT&T.

Existe, é claro, uma especificação mínima que a Microsoft impôs e (fiquem felizes!) é muito boa!

  • A tela MULTI-TOUCH deve detectar no mínimo 4 pontos de pressão;
  • Alguns censores são obrigatórios, sendo eles:
    • A-GPS, ou seja, GPS Assistido (GPRS ou 3G);
    • Acelerômetro;
    • Bússola;
    • Luz;
    • Censor de proximidade;
  • Câmera atrás do dispositivo de no mínimo 5 megapixels, flash e botão exclusivo;
  • 256MB de memória RAM no mínimo;
  • Armazenamento em memória Flash de 8GB ou mais;
  • GPU com suporte a DirectX9(e ai, alguém já sacou?);
  • A CPU tem que ser um ARMv7 Cortex/Scorpion ou melhor;
  • O tamanho da tela tem que ser 480×800 ou 480×320
    pixels;
  • O teclado é opcional, mas o dispositivo DEVE ter 3 botões, sendo eles: Back, Start e Search.
    • O Back volta para a tela anterior, o Start é como o menu iniciar do Windows, mostrando o menu principal, e o Search abre uma pesquisa do Bing para fazer pesquisas na Web.
  • Não podem possuir slots de memória (memory card/SD/etc). Isso é para evitar pirataria/cópia de arquivos ilegal.

Basicamente é isso.
Quem tem um certo "feeling" já deve ter percebido que o DirectX9 não esta em negrito à toa.

WINDOWS PHONE 7 SERIES TERÁ SUPORTE NATIVO AO SILVERLIGHT 4 E XNA 4.0!

Simplesmente fantástico!

E o mais legal! No MIX, em Las Vegas, a Microsoft lançou a ferramenta de desenvolvimento do WP7!
Esta ferramenta na verdade é uma versão do Visual Studio 2010, que lança em 10 dias, com os Frameworks do XNA4 e o Silverlight4. Além disso, ela contém um emulador do Windows Phone 7! Lembre-se que estas ferramentas só funcionam no Windows Vista SP2 (os superior) ou o Windows 7 e, para rodar o emulador do WP7, sua placa de vídeo deve ter suporte ao DX10! Calma! Isso não significa que o XNA4 só roda no DX10! O emulador utiliza funcionalidades somente suportadas pelo DX10. Você ainda pode desenvolver em XNA 4 para Windows e XBox360 testando o seu jogo sem atualizar a sua placa de vídeo. Obs: se sua placa for NVidia, apenas as placas da série 8, ou superior, suportam o DX10, ou seja, qualquer placa abaixo disso, não roda o emulador. Por exemplo: Geforce 4 MX 440 (clássica) não roda; Geforce 5xxx não roda; Geforce 6xxx não roda; Geforce 7xxx não roda. (Ninguém ai tem uma Geforce pior que uma Geforce 4, né?)

Ok, voltando ao conteúdo importante…

A Microsoft se superou e lançou, juntamente com as ferramentas de desenvolvimento, o Windows Phone Market Place, um site/serviço da MS para vender aplicativos para WP7, que será acessível pelo próprio WP7! E o melhor!!! Completamente de graça para estudantes
venderem suas apps/jogos!!!
A MS liberou este serviço apenas para alguns países do mundo e, na América Lativa, APENAS PARA O BRASIL! Então aproveite e registre-se! Comece a vender os seus games o quanto antes! Para mais informações sobre o serviço entre aqui!

Espero que tenham gostado do post! Tem muita informação e muito a ser feito!

Grato,
       Alexandre Z. Chohfi