Esse artigo faz parte da revista WebMobile edição 15. Clique aqui para ler todos os artigos desta edição

imagem.JPG

Criando jogos para celular

Usando o Compact Framework para criar games

 

O.NET Compact Framework é um subconjunto do .NET Framework, que foi reduzido para que nele coubessem recursos relacionados a dispositivos móveis, sem comprometer as funcionalidades que os usuários precisam na maioria dos cenários.

As vantagens do .NET Compact Framework, entre outras coisas, incluem a distribuição binária para Pocket PC e outros dispositivos de Windows CE .NET, aumento de produtividade do programador e tempo reduzido para entrega do produto.

Neste artigo, discutirei as exigências chaves para escrever jogos para pequenos dispositivos e mostrarei que o .NET Compact Framework pode lidar com eles com facilidade.

Discutirei também algumas das técnicas de ajuste de desempenho avançadas que você pode usar para ampliar os limites do seu jogo. Em resumo, você verá como é fácil desenvolver e aperfeiçoar seus jogos usando o .NET Compact Framework. Será um passeio divertido, então apertem os cintos e divirtam-se.

Este artigo pressupõe um determinado nível de familiaridade com o .NET Compact Framework e com o desenvolvimento de jogos em geral.

Nota: O jogo criado está disponível para download no endereço do artigo.

Modo de jogo de tela inteira

Freqüentemente, em aplicativos de jogos, é desejável utilizar a capacidade real de exibição em tela inteira do dispositivo. Um formulário que ocupe toda a área de tela é chamado de formulário de tela inteira (fullscreen), também conhecido como formulário de jogo.

Ou seja, um formulário de tela inteira ocupa a tela principal (ou “área cliente”) mais a área “não-cliente”, tal como a barra de título/navegação no alto, laterais e a barra de menu. Um aplicativo cria um formulário de tela inteira ajustando a propriedade WindowState como maximizado:

 

form.WindowState = FormWindowState.Maximized;

 

Se houver uma barra de menu (e/ou uma barra de ferramentas no Pocket PC) acoplada ao formulário, então a tela não poderá ser feita inteira. Na versão 1.0 do .NET Compact Framework do Pocket PC, para criar um aplicativo de tela inteira, a propriedade WindowState devia ser configurada dentro do OnLoad do formulário. A Figura 1 mostra as diferenças entre os formulários tela inteira e tela parcial em um Pocket PC.

 

Figura 1. Formulário de tela parcial e cheia

 

A implicação preliminar de ter um formulário de tela inteira, é que não há nenhum título/barra de navegação ou barra de menu. O aplicativo deve levar esses fatores em consideração e fornecer os meios para contornar as funcionalidades quando necessário.

Se você quiser que o formulário preencha apenas a área de tela principal disponível (mas não tela inteira), você não necessita fazer qualquer coisa. Por padrão, o .NET Compact Framework automaticamente dimensionará o formulário para preencher a tela no Pocket PC.

Para dizer a verdade, recomenda-se que você não configure explicitamente o ClientSize do formulário, pois pode obstruir a interoperabilidade de seu aplicativo entre vários dispositivos do Windows CE .NET.

Por exemplo, se você explicitamente dimensionar o aplicativo para se ajustar ao formulário de um dispositivo, ele pode não ser aceitável em um dispositivo diferente. É aconselhável seguir com o tamanho padrão do formulário.

 

Sobscrevendo OnPaint e OnPaintBackground

Um aplicativo típico de jogos desenharia costumeiramente o conteúdo do formulário. Ele faz isso sobrescrevendo um evento chamado OnPaint e executaria a pintura padrão do formulário:

 

protected override void OnPaint(PaintEventArgs paintg)

{

  Graphics gx = paintg.Graphics;

}

 

Quando um controle começa a pintar, seu plano de fundo é, em primeiro lugar, atualizado automaticamente. Por exemplo, ao processar OnPaint para pintar o conteúdo do controle, o seu plano de fundo é pintado primeiro com a cor especificada em Backcolor.

Isso pode ser indesejável no caso anterior onde o aplicativo próprio desenha o formulário. A pintura automática do plano de fundo pode resultar em “piscadas” momentâneas do mesmo, antes que o aplicativo tenha a oportunidade de terminar de pintar o primeiro plano.

Para impedir esse comportamento padrão, quando quer que um aplicativo sobrescreva o OnPaint, é altamente recomendado que ele também sobrescreva o OnPaintBackground e pinte o plano de fundo ele próprio. O aplicativo pode escolher realizar toda a pintura dentro de OnPaint e deixar o OnPaintBackground vazio, como no exemplo:

 

protected override void OnPaintBackground(

  PaintEventArgs paintg)

{

  //deixar em branco, evitando o “flickering”

}

 

Técnica de pintura “off-screen”

Você pode desenhar em tela obtendo o objeto gráfico através do this.CreateGraphics de um controle e desenhar diretamente na tela. Você deve sempre lembrar de descartar o objeto gráfico quando esse já não se fizer mais necessário. Não fazer isso pode causar o consumo dos limitados recursos do dispositivo.

Como visto na seção anterior, você pode acessar o objeto gráfico da tela dentro dos métodos OnPaint e OnPaintBackground através de PaintEventArgs.Graphics. Esses objetos gráficos são automaticamente descartados uma vez que o método de pintura é executado.

Freqüentemente, para os aplicativos de jogos, desenhar diretamente em tela não é o ideal, porque quando você está desenhando muitos objetos em tela, você começaria ver o piscar da tela. Para evitar isso, os programadores de jogos recorrem geralmente a técnicas de desenho fora de tela (“off-screen”).

...

Quer ler esse conteúdo completo? Tenha acesso completo