[RESOLVIDO]Objeto Graphics dando Bug...Tem como Criar Dois?

2 respostas
SirDominque

Gente, quando eu uso o objeto graphics pra desenhar retangulos pretos e depois mando ele desenhar retangulos vermelhos, o primeiro retangulo preto fica vermelho...

Por favor,preciso de uma ajudinha aqui rsrsrs; Agradeço Pessoal , to quase la !!
package View;

import ControllerGameUpdate.GameUpdate;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

public class MainView extends javax.swing.JFrame {

    private static final long serialVersionUID = 1L;
    
    private GameUpdate gameUpdate;
    
    private int snakePosX;
    private int snakePosY;
    private int wallStartPosX;
    private int wallStartPosY;

    public MainView() {
        initComponents();
        createBufferStrategy(2);
        this.setBackground(Color.yellow);
        snakePosX = getInsets().right;
        snakePosY = getInsets().top;
        gameUpdate = new GameUpdate(this);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton_Animate = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton_Animate.setText("Animation");
        jButton_Animate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton_AnimateActionPerformed(evt);
            }
        });

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 742, Short.MAX_VALUE)
                .addComponent(jButton_Animate))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jButton_Animate, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 490, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton_AnimateActionPerformed(java.awt.event.ActionEvent evt) {                                                
       BufferStrategy bf = getBufferStrategy();
        Graphics2D g = null;
        try {
            g = (Graphics2D) bf.getDrawGraphics();
            drawning(g);
        } finally {
            g.dispose();
        }
        if (!bf.contentsLost()) {
            bf.show();
        }
    }                                               

    public static void main(String args[]) {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(MainView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainView().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton_Animate;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    // End of variables declaration                   

    private void drawning(Graphics2D g) {
        gameUpdate.Drawning(g);
        
    }

    public GameUpdate getGameUpdate() {
        return gameUpdate;
    }

    public void setGameUpdate(GameUpdate gameUpdate) {
        this.gameUpdate = gameUpdate;
    }

    public int getSnakePosX() {
        return snakePosX;
    }

    public void setSnakePosX(int snakePosX) {
        this.snakePosX = snakePosX;
    }

    public int getSnakePosY() {
        return snakePosY;
    }

    public void setSnakePosY(int snakePosY) {
        this.snakePosY = snakePosY;
    }

    public int getWallStartPosX() {
        return wallStartPosX;
    }

    public void setWallStartPosX(int wallStartPosX) {
        this.wallStartPosX = wallStartPosX;
    }

    public int getWallStartPosY() {
        return wallStartPosY;
    }

    public void setWallStartPosY(int wallStartPosY) {
        this.wallStartPosY = wallStartPosY;
    }

    public JButton getjButton_Animate() {
        return jButton_Animate;
    }

    public void setjButton_Animate(JButton jButton_Animate) {
        this.jButton_Animate = jButton_Animate;
    }

    public JMenu getjMenu1() {
        return jMenu1;
    }

    public void setjMenu1(JMenu jMenu1) {
        this.jMenu1 = jMenu1;
    }

    public JMenu getjMenu2() {
        return jMenu2;
    }

    public void setjMenu2(JMenu jMenu2) {
        this.jMenu2 = jMenu2;
    }

    public JMenuBar getjMenuBar1() {
        return jMenuBar1;
    }

    public void setjMenuBar1(JMenuBar jMenuBar1) {
        this.jMenuBar1 = jMenuBar1;
    }
    
    
}

----------------

A classe GameUpdate

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ControllerGameUpdate;

import Objects.Snake;
import Objects.Wall;
import View.MainView;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.util.ArrayList;

/**
 *
 * @author André
 */
public class GameUpdate {

    public ArrayList<Snake> mySnake = new ArrayList<>();
    public ArrayList<Wall> myWall = new ArrayList<>();
    public MainView mainView;

    public GameUpdate(MainView mv) {
        mainView = mv;

    }

    public void Drawning(Graphics2D g) {
        DrawnWalls(g);
        Snake snakePiece = new Snake(mainView.getSnakePosX(), mainView.getSnakePosY());
        mainView.setSnakePosX(mainView.getSnakePosX() + 10);
        mainView.setSnakePosY(mainView.getSnakePosY() + 10);
        mySnake.add(snakePiece);

        g.draw(snakePiece.getSnakePiece());
        checkCollision(g, snakePiece.getSnakePiece());

    }

    public void DrawnWalls(Graphics2D g) {
        while (myWall.size() < 40) {
            mainView.setWallStartPosX(200);
            Wall w = new Wall(mainView.getWallStartPosX(), mainView.getWallStartPosY());
            myWall.add(w);
            //mainView.setWallStartPosX(mainView.getWallStartPosX() + 10);
            mainView.setWallStartPosY(mainView.getWallStartPosY() + 10);

            Rectangle wallPiece = w.getWallPiece();
            g.setColor(Color.RED);
            g.fill(wallPiece);
            g.draw(wallPiece);


        }
    }

    public void checkCollision(Graphics2D g, Rectangle snakePiece) {


        for (int k = 0; k < myWall.size(); k++) {
            Rectangle wallPiece = myWall.get(k).getWallPiece();


            if ((mathCollisionDetection(snakePiece, wallPiece) == true)) {
                System.out.println("Snake Piece Location : " + snakePiece.getLocation());
                System.out.println("Wall Piece Location : " + wallPiece.getLocation());

                System.out.println("COLLISION DETECTED ! ");
                g.drawString("Collision Detected", 100, 200);

                
                
                Double snakePieceGetX = snakePiece.getX();
                Integer xPos = snakePieceGetX.intValue();
                
                Double snakePieceGetY = snakePiece.getY();
                Integer yPos = snakePieceGetY.intValue();
                
                g.drawString("[X]",xPos,yPos);
                
                Rectangle warningRectangle = new Rectangle(xPos,yPos,10,10);
                g.setColor(Color.MAGENTA);
                g.fill(warningRectangle);
                g.draw(warningRectangle);
                
                System.out.println("[X] // xPos == " + xPos);
                System.out.println("[X] // yPos == " + yPos);

            }

        }


    }

    public boolean mathCollisionDetection(Rectangle SnakePiece, Rectangle wallPiece) {
        boolean hasCollided = false;
        //
        if (SnakePiece.intersects(wallPiece)) {
            return true;
        }

        //
        return hasCollided;
    }
}

2 Respostas

ViniGodoy

Faz sentido, a forma que você está usando está completamente errada.
De onde você tirou que pode usar desse jeito?

De qualquer forma, para fazer uma cópia do objeto Graphics é só chamar o método create:

PS: Drawning significa “afogando”. Drawing é que significa desenhando.

SirDominque

ViniGodoy:
Faz sentido, a forma que você está usando está completamente errada.
De onde você tirou que pode usar desse jeito?

De qualquer forma, para fazer uma cópia do objeto Graphics é só chamar o método create:

PS: Drawning significa “afogando”. Drawing é que significa desenhando.

Obrigadão Viny, me salvou de novo.
//Entendi.
PS: é verdade aushaushuahs , vou refatorar isso aí :stuck_out_tongue:

Criado 3 de março de 2013
Ultima resposta 3 de mar. de 2013
Respostas 2
Participantes 2