Problemas ao desenhar gráfico

2 respostas
Onimatsu

Boa noite colegas do guj.
Estou a fazer um menu de jogo só que as imagens não são desenhadas na tela por algum motivo que não consigo identificar então venho pedir ajuda a vocês.

Agradeço desde já.

Main
package menus;

import javax.swing.JFrame;

public class Arkanoid extends JFrame {

    final static int WINDOW_WIDTH = 1024;
    final static int WINDOW_HEIGHT = 660;

    public Arkanoid() {
        this.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(new MenuVisual()); // necessário implements JPanel em Menu
        this.setLocationRelativeTo(null);
        this.setTitle("Arkanoid");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(null);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        // TODO code application logic here
        Arkanoid arkanoid = new Arkanoid();
    }
}
Menu visual
package menus;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;

class MenuVisual extends JPanel implements KeyListener {

    MenuLogico logicMenu;
    BufferedImage backBuffer;

    public MenuVisual() {

        this.initComponents();
        this.addComponents();

        new Thread(new Runnable() {

            @Override
            public void run() {
                while (true) {
//                    desenharGraficos();
                    actionPerformed(null);
                    try {
                        Thread.sleep(1000 / 30);
                    } catch (Exception e) {
                        e.getStackTrace();
                    }
                }
            }
        }).start();
    }

    private void initComponents() {
        logicMenu = new MenuLogico(4);
        logicMenu.itens[0] = "START GAME";
        logicMenu.itens[1] = "SCORING LEADERS";
        logicMenu.itens[2] = "OPTIONS";
        logicMenu.itens[3] = "EXIT";
        backBuffer = new BufferedImage(Arkanoid.WINDOW_WIDTH, Arkanoid.WINDOW_HEIGHT, BufferedImage.TYPE_INT_RGB);
        logicMenu.bbg = backBuffer.getGraphics();
    }

    private void addComponents() {
        this.addKeyListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        desenharGraficos(g);
    }

    private void desenharGraficos(Graphics g) {
//        Graphics g = getGraphics();
        Graphics bbg = backBuffer.getGraphics();
        bbg.setColor(Color.WHITE);
        g.fillRect(0, 0, Arkanoid.WINDOW_WIDTH, Arkanoid.WINDOW_HEIGHT);

        logicMenu.desenharMenu();
        this.cenario();

        g.drawImage(backBuffer, 0, 0, this);
    }

    private void cenario() {
        Graphics bbg = backBuffer.getGraphics();
        bbg.setFont(new Font("Calibri", Font.BOLD, 15));

        if (logicMenu.cenario == 0) {
            bbg.setColor(Color.BLACK);
            bbg.fillRect(0, 0, Arkanoid.WINDOW_WIDTH, Arkanoid.WINDOW_HEIGHT);
            bbg.drawString("Você escolheu start game", 100, 200);
        } else if (logicMenu.cenario == 1) {
            bbg.setColor(Color.BLACK);
            bbg.fillRect(0, 0, Arkanoid.WINDOW_WIDTH, Arkanoid.WINDOW_HEIGHT);
            bbg.drawString("Você escolheu scoring leaders", 100, 200);
        } else if (logicMenu.cenario == 2) {
            bbg.setColor(Color.BLACK);
            bbg.fillRect(0, 0, Arkanoid.WINDOW_WIDTH, Arkanoid.WINDOW_HEIGHT);
            bbg.drawString("Você escolheu options", 100, 200);
        } else if (logicMenu.cenario == 3) {
            System.exit(0);
        }
    }

    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent e) {
        logicMenu.controlar(e);
        logicMenu.voltarAoMenu(e);
    }

    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
Lógica do menu
package menus;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;

public class MenuLogico {

    int cenario = -1, itemSelecionado = 0;
    boolean ativo;
    String itens[];
    Graphics bbg;

    public MenuLogico(int numeroDeItens) {
        itens = new String[numeroDeItens];
        this.ativo = true;
    }

    public void controlar(KeyEvent e) {
        if (ativo) {
            controlarMenu(e);
        }
    }

    private void controlarMenu(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            itemSelecionado--;
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            itemSelecionado++;
        }
        // controla o limite do menu
        if (itemSelecionado >= itens.length) {
            itemSelecionado = 0;
        } else if (itemSelecionado < 0) {
            itemSelecionado = itens.length - 1;
        }
        // desativa controlar caso algum itens seja escolhido
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            cenario = itemSelecionado;
            ativo = false;
        }
    }

    void voltarAoMenu(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
            this.cenario = -1; // sai do cenário selecionado
            this.ativo = true; // permite utilizar o método que controla o menu
        }
    }

    void desenharMenu() {
        bbg.setFont(new Font("Calibri", Font.BOLD, 15));
        for (int i = 0; i < itens.length; i++) {
            if (itemSelecionado == i) {
                bbg.setColor(Color.red);
                bbg.drawString(itens[i], 100, 200);
            } else {
                bbg.setColor(Color.black);
                bbg.drawString(itens[i], 100, 200);
            }
        }
    }
}

2 Respostas

E

Graphics bbg - quem inicializa essa variável? Ela representa o quê?

E

Hum, vi esta linha no seu código:

logicMenu.bbg = backBuffer.getGraphics();

Ou seja, agora vi de onde vem “bbg”. Mas tem mais alguma coisa errada

Criado 12 de maio de 2013
Ultima resposta 13 de mai. de 2013
Respostas 2
Participantes 2