Problemas com drawString

1 resposta
G

Boa noite a todos, tenho o seguinte gamecanvas, do meu jogo de canhão e balões:

/*
 * 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);
        }
    }
    
}

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!

1 Resposta

G

Alguém por favor? Pode ser utilizando o drawString ou alguma outra forma de escrever na tela!

Criado 21 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 1
Participantes 1