Boa noite a todos, tenho o seguinte gamecanvas, do meu jogo de canhão e balões:
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package classes;
import java.io.IOException;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
/**
*
-
@author Gabriel
*/
public class CanhaoCanvas extends GameCanvas implements Runnable {private final Command voltar;
private final LayerManager layerManager;
private final Tank tank;
private final Bala bala;
private final Bala bomba1;
private final Bala bomba2;
private final Bala bomba3;
private final Balao balao1;
private final Balao balao2;
private final Balao balao3;
private final GameOver gameOver;
private final Fundo fundo;
private boolean executando;
private boolean explodiu;
private int pontos;
private int xMaximo;
private int yMaximo;
private int veloBala;
private int contadorA;
private int contadorB;
private int contadorC;public CanhaoCanvas() throws IOException{
super(true);
voltar = new Command(“Voltar”, Command.OK, 0);
this.addCommand(voltar);
tank = new Tank();
bala = new Bala(“imagens/missel.png”, 10, 38, 5, 19, -36, 4000000, 0, 3);
bomba1 = new Bala(“imagens/bomba.png”, 7, 13, 3, 6, -50, 0, 0, 0);
bomba2 = new Bala(“imagens/bomba.png”, 7, 13, 3, 6, -50, 0, 0, 0);
bomba3 = new Bala(“imagens/bomba.png”, 7, 13, 3, 6, -50, 0, 0, 0);
balao1 = new Balao("/imagens/frameBaloes.png", 48, 51, 30, 23, 0, 24, 25, ‘d’, 4);
balao2 = new Balao("/imagens/frameBaloes2.png", 50, 51, 160, 70, 1, 25, 25, ‘e’, 7);
balao3 = new Balao("/imagens/frameBaloes3.png", 43, 51, 110, 130, 1, 21, 25, ‘d’, 2);
gameOver = new GameOver();
fundo = new Fundo();
xMaximo = this.getWidth();
yMaximo = this.getHeight();
layerManager = new LayerManager();
layerManager.append(tank);
layerManager.append(balao1);
layerManager.append(balao2);
layerManager.append(balao3);
layerManager.append(bala);
layerManager.append(bomba1);
layerManager.append(bomba2);
layerManager.append(bomba3);
layerManager.append(gameOver);pontos = 0; veloBala = 0; explodiu = false; contadorA = 0; contadorB = 0; contadorC = 0;
}
public final void start() {
executando = true;
Thread t = new Thread(this);
t.start();
}public final void stop() {
executando = false;
}public void run() {
System.out.println(xMaximo +" "+ yMaximo);
Graphics grafico = getGraphics();
grafico.setColor(0xffffff);
Font fonte = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD, Font.SIZE_SMALL);
grafico.setFont(fonte);
while (executando) {
long inicio = System.currentTimeMillis();
moverBalao();
controleDoTank();
colisaoBalaBalao();
atirarBomba();
colisaoBombaTank();
bala.mover(bala.getVelocidade(), ‘s’);
bomba1.mover(bomba1.getVelocidade(), ‘d’);
bomba2.mover(bomba2.getVelocidade(), ‘d’);
bomba3.mover(bomba3.getVelocidade(), ‘d’);
renderiza(grafico);
verificaFimDeJogo();
long fim = System.currentTimeMillis();
long tempo = fim - inicio;
if (tempo<100){
try {
Thread.sleep(100-tempo);
} catch (InterruptedException ie) {
}
}
}
}private final void renderiza(Graphics g) {
g = getGraphics();
g.setColor(107, 187, 10);
g.fillRect(0, 0, xMaximo, yMaximo);
g.setColor(0, 0, 0);
g.drawString("Placar: "+pontos, xMaximo - 10, 5, Graphics.TOP | Graphics.RIGHT);
g.drawString("Balas: "+bala.getQdeBalas(), xMaximo - 10, 20, Graphics.TOP | Graphics.RIGHT);
layerManager.paint(g, 0,0);
flushGraphics();
layerManager.append(fundo);
}private void moverBalao(){
if (balao1.getX() < 0 || balao1.getX() > (this.xMaximo - balao1.getWidth())) {
balao1.inverte(balao1.getDirecao());
contadorA++;
}
balao1.mover(balao1.getVelocidade(), balao1.getDirecao());
if (balao2.getX() < 0 || balao2.getX() > (this.xMaximo - balao2.getWidth())) {
balao2.inverte(balao2.getDirecao());
contadorB++;
}
balao2.mover(balao2.getVelocidade(), balao2.getDirecao());
if (balao3.getX() < 0 || balao3.getX() > (this.xMaximo - balao3.getWidth())){
balao3.inverte(balao3.getDirecao());
contadorC++;
}
balao3.mover(balao3.getVelocidade(), balao3.getDirecao());
}private void colisaoBalaBalao() {
if (bala.collidesWith(balao1, true)){
try {
Manager.playTone(95, 200, 100);
pontos = pontos + 5;
veloBala++;
balao1.setVelocidade(balao1.getVelocidade()+1);
bala.setQdeBalas(bala.getQdeBalas()+1);
bala.parar();
layerManager.remove(bala);
} catch (MediaException e) {
e.printStackTrace();
}
} else {
if (bala.collidesWith(balao2, true)){
try {
Manager.playTone(83, 200, 100);
pontos = pontos + 2;
veloBala++;
balao2.setVelocidade(balao2.getVelocidade()+1);
bala.setQdeBalas(bala.getQdeBalas()+1);
bala.parar();
layerManager.remove(bala);
} catch (MediaException e) {
e.printStackTrace();
}
} else {
if (bala.collidesWith(balao3, true)){
try {
Manager.playTone(71, 200, 100);
pontos = pontos + 1;
veloBala++;
balao3.setVelocidade(balao3.getVelocidade()+1);
bala.setQdeBalas(bala.getQdeBalas()+1);
bala.parar();
layerManager.remove(bala);
} catch (MediaException e) {
e.printStackTrace();
}
}
}
}
}private final void colisaoBombaTank(){
if (bomba1.collidesWith(tank, true) || bomba2.collidesWith(tank, true) || bomba3.collidesWith(tank, true)){
explodiu = true;
}
}private final void atirarBomba(){
if (contadorA == 2){
bomba1.disparar(balao1.getRefPixelX(), balao1.getRefPixelY(), 5 + veloBala);
contadorA = 0;
}
if (contadorB == 3){
bomba2.disparar(balao3.getRefPixelX(), balao3.getRefPixelY(), 3 + veloBala);
contadorB = 0;
}
if (contadorC == 5){
bomba3.disparar(balao2.getRefPixelX(), balao2.getRefPixelY(), 5 + veloBala);
contadorB = 0;
}
}private final void controleDoTank() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0 && tank.getX() > 0) {
tank.setFrame(0);
tank.mover(5, ‘e’);
} else if ((keyStates & RIGHT_PRESSED) != 0 && (tank.getX() + tank.getWidth()) < xMaximo) {
tank.setFrame(2);
tank.mover(5, ‘d’);
} else if ((keyStates & UP_PRESSED) != 0){
tank.setFrame(1);
bala.disparar(tank.getRefPixelX(), tank.getRefPixelY(), 5 + veloBala);
bala.setQdeBalas(bala.getQdeBalas()-1);
layerManager.append(bala);
}
}private final void verificaFimDeJogo(){
if(explodiu == true || bala.getQdeBalas() < 0){
gameOver.exibir();
bala.parar();
layerManager.remove(bala);
layerManager.remove(balao1);
layerManager.remove(balao2);
layerManager.remove(balao3);
layerManager.remove(tank);
layerManager.remove(bomba1);
layerManager.remove(bomba2);
layerManager.remove(bomba3);
}
}
}
[/code]
O meu problema é que quando o meu jogo inicia, o objeto fundo (que é um TiledLayer) fica por cima de todos os textos que coloquei com o uso do g.drawString(…), no método renderiza. Gostaria de saber como trazer para frente do fundo os meus textos. Já tentei fazer com o que o renderiza seja chamado antes de dar append no fundo mas não adiantou muito. Desde já agradeço pela ajuda!