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

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 !!

[code]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;
}

}
[/code]


A classe GameUpdate

[code]/*

  • 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 mySnake = new ArrayList<>();
    public ArrayList 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;
    

    }
    }
    [/code]

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.

[quote=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.[/quote]

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