J2ME/Lições/GameCanvas: diferenças entre revisões

[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m "Extender" não existe em Português.
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 5:
Primeiramente vamos importar o pacote que contém a classe GameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
</syntaxhighlight>
</source>
 
Agora vamos criar a classe MeuGameCanvas, estendendo a classe GameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
public class MeuGameCanvas extends GameCanvas{
}
</syntaxhighlight>
</source>
 
Uma classe que extende o GameCanvas precisa obrigatoriamente de um construtor.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
Linha 27:
}
}
</syntaxhighlight>
</source>
 
Agora precisamos obrigatoriamente instanciar a classe superior GameCanvas dentro do construtor, usaremos o argumento true (se quisermos herdar os métodos da classe Canvas) ou false (se quisermos usar apenas os métodos da classe GameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
Linha 39:
}
}
</syntaxhighlight>
</source>
 
==Utilizando Canvas no GameCanvas==
Linha 45:
Do mesmo modo que a classe Canvas, na classe GameCanvas podemos usar o método '''paint()''' (que na GameCanvas é public) para exibir algo na tela. Vamos primeiramente inserir o pacote que contém a classe Canvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 57:
}
}
</syntaxhighlight>
</source>
 
Agora vamos criar o método '''paint()'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 73:
}
}
</syntaxhighlight>
</source>
 
Agora vamos desenhar um retângulo na tela.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 90:
}
}
</syntaxhighlight>
</source>
 
Também podemos implementar outros métodos da classe Canvas como o '''keyPressed()''' (como public).
Linha 100:
Bom, primeiramente agora que não temos mais o método paint() que era inicializado automaticamente, vamos agora usar outro método que também é chamado automaticamente, ele está dentro da interface '''Runnable''', vamos implementar na classe.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 109:
}
}
</syntaxhighlight>
</source>
 
Agora devemos obrigatoriamente incluir dentro da nossa classe o método '''run()''' da interface '''Runnable''' que é o método que é chamado automaticamente, será dentro dele que iremos incluir todas as ações da classe.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 124:
}
}
</syntaxhighlight>
</source>
 
Agora vamos instanciar um objeto da classe '''Thread''', ele será o controlador que irá iniciar a nossa classe.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 141:
}
}
</syntaxhighlight>
</source>
 
Devemos agora iniciar o objeto thread dentro do construtor da classe, como parâmetro vamos usar o this da classe GameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 159:
}
}
</syntaxhighlight>
</source>
 
Já temos tudo pronto, agora por último vamos iniciar a o objeto Thread que criamos utilizando o método '''start()''' dentro do construtor.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 178:
}
}
</syntaxhighlight>
</source>
 
==Exibindo algo no GameCanvas==
Linha 184:
Agora com a estrutura básica do nosso GameCanvas pronta, precisamos criar um objeto do tipo '''Graphics''' dentro da nossa classe GameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 200:
}
}
</syntaxhighlight>
</source>
 
Agora dentro criaremos o loop principal dentro do método '''run()''', primeiramente vamos criar uma variavel booleana, para criar a condição do jogo.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 221:
}
}
</syntaxhighlight>
</source>
 
Agora vamos criar o loop com um comando while que irá comparar a variavel booleana que criamos.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 244:
}
}
</syntaxhighlight>
</source>
 
Por fim dentro do loop vamos chamar o método '''flushGraphics()''' que irá desenhar o gráfico na tela do celular.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 268:
}
}
</syntaxhighlight>
</source>
 
Agora como exemplo vamos exibir um retângulo na tela através do objeto do tipo Graphics.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 293:
}
}
</syntaxhighlight>
</source>
 
==Controlando a velocidade do aplicativo==
Linha 301:
Para isso primeiramente precisamos criar um '''try-catch-finally''' dentro do loop principal.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 325:
}
}
</syntaxhighlight>
</source>
 
Agora, como devemos sempre pintar a tela a cada loop colocamos o '''flushGraphics()''' dentro do '''finally'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 354:
}
}
</syntaxhighlight>
</source>
 
Agora dentro do '''try''' vamos utilizar o método '''sleep()''' da classe '''Thread''' e entrar como parâmetro o tempo em milisegundos que a aplicação deve esperar para chamar o próximo loop, nesse caso iremos esperar 50 milisegundos (o que dá 20 quadros por segundo) que é mais ou menos a taxa de atualização da tela da maioria dos celulares.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 384:
}
}
</syntaxhighlight>
</source>
 
Agora por último colocaremos um simples retângulo para andar na tela, para isso criaremos uma variável '''int''' auxiliar que irá encrementar-se a cada loop, e depois usaremos essa variável em um parâmetro do método '''drawRect()'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 417:
}
}
</syntaxhighlight>
</source>
 
Você pode mudar a taxa de atualização na tela (método sleep()) e verá que o retângulo irá se mover com diferentes velocidades.
Linha 427:
Primeiramente dentro do '''run()''' vamos criar uma variável que tem que ser do tipo '''int''' que irá receber os controles.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 455:
}
}
</syntaxhighlight>
</source>
 
Agora dentro do loop principal vamos checar se alguma tecla foi pressionada através do método '''getKeyStates()'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 488:
}
}
</syntaxhighlight>
</source>
 
Agora vamos criar uma condição caso uma tecla específica seja apertada, nesse caso vamos usar a tecla FIRE e desenhar outro retângulo na tela caso ela seja apertada, note que agora vamos usar a constante '''FIRE_PRESSED'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 525:
}
}
</syntaxhighlight>
</source>
 
==Imagens no GameCanvas==
Linha 533:
Primeiramente dentro do método '''run()''' vamos colocar um try-catch.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 564:
}
}
</syntaxhighlight>
</source>
 
Agora dentro do vamos instanciar o objeto '''Image''' na classe MeuGameCanvas.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 600:
}
}
</syntaxhighlight>
</source>
 
Depois vamos iniciar o objeto '''Image''' dentro do try no método '''run()'''.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 637:
}
}
</syntaxhighlight>
</source>
 
Agora normalmente dentro do loop do jogo colocamos a imagem para ser exibida.
 
<sourcesyntaxhighlight lang="java">
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
Linha 675:
}
}
</syntaxhighlight>
</source>
 
{{AutoCat}}