Problemas com drawString

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!

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