Não sei o que fazer - Nao consigo reiniciar jPanel

5 respostas
SirDominque

Gente,ja nao sei mais o que fazer... Segui o tutorial, depurei tudo isso , mas simplesmente nao consigo.
Desculpa tantos posts, mas é que realmente agora empaquei.. na vdd essa dúvida é a junção das outras duas atrás...

Pior que não achei ninguem com essa dúvida.. Isso de java2D é meio estranho... Enfim, estou upando o código, junto com a snake.jpg.

Nao sei se alguem vai conseguir me ajudar, mas pelo menos fica aqui postado , caso tenha alguem com a mesma dúvida...Talvez Ajude.

Ah ta, então, quando eu mudo a Snake de lugar e chamo o Método Running(), ela fica bugada, e as vezes apaga as outras snakes e as vezes nao, e fica criando uma em cima da outra.
Nao sei o que fazer. Ja estou copiando o Graphics, ja tentei dar dispose, repaint, etc.

NAO FUNCIONA.

package Controllers;

import Objetos.Snake;
import View.MainView;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;

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

    private MainView mainView;
    private Snake snake;
    private int gamePanelWidth,gamePanelHeight;
    
    public GameUpdate(MainView mv)
    {
        mainView = mv;
        
        
        snake = new Snake(10,10);
        
        gamePanelWidth = mainView.jPanel_GamePanel.getWidth();
        gamePanelHeight = mainView.jPanel_GamePanel.getHeight();
        
       
    }
    
    
    public void Running()
    {
        //Pegar o Graphics do JPAnel GAME :
        Graphics2D jPanelGraphics = (Graphics2D) mainView.jPanel_GamePanel.getGraphics();
        
        // Criar um Auxliar desse Graphic
        Graphics jPanelAuxGraphic = jPanelGraphics.create();
        
        //Carrega a imagem da Snake
        BufferedImage snakeImage = snake.getSnakeImage();
        
        //Cria imagem Auxiliar
        Image drawingImage =  mainView.jPanel_GamePanel.createImage(gamePanelWidth, gamePanelHeight);
        
       
        //Pega o Graphics da Imagem auxiliar para colocar no jPanel
        Graphics2D graphicsImage = (Graphics2D) drawingImage.getGraphics();
        
        
        //Desenha a snake na imagem Auxiliar
        graphicsImage.drawImage(snakeImage,0,0,null);
        
        
        //Desenha a Imagem Auxiliar no jPanel_GamePanel
        jPanelAuxGraphic.drawImage(drawingImage,snake.getPositionX(),snake.getPositionY(),null);

        //jPanelAuxGraphic.dispose();
        //graphicsImage.dispose();
        
        
    }
    
    public void moveSnakeLeft()
    {
        snake.setPositionX(snake.getPositionX() - 10);
        
    }
    
    public void moveSnakeRight()
    {
        snake.setPositionX(snake.getPositionX() + 10);
    }
 
    public void moveSnakeUp()
    {
        snake.setPositionY(snake.getPositionY()+ 10);
    }
    
    public void moveSnakeDown()
    {
        snake.setPositionY(snake.getPositionY()- 10);
    }
    
}

5 Respostas

douglaskd

1 detalhe mude isso:

public void moveSnakeUp()
    {
        snake.setPositionY(snake.getPositionY()+ 10);
    }
    
    public void moveSnakeDown()
    {
        snake.setPositionY(snake.getPositionY()- 10);
    }

pra subir é -10 pra descer é +10

douglaskd

nas variaveis da classe GameUpdate criei essa variavel:

Graphics2D Tela;

no Construtor fiz:

Tela = (Graphics2D) mainView.jPanel_GamePanel.getGraphics();

mudei seu método Running e criei um método delete.

public void Running(){

        Tela.drawImage(snake.getSnakeImage(),snake.getPositionX(),snake.getPositionY(),null);

    }
    
    
public void DeleteSnake(){
        
        Tela.clearRect(snake.getPositionX(), snake.getPositionY(), snake.getSnakeImage().getWidth(), snake.getSnakeImage().getHeight()); 
        
    }

chamo DeleteSnake antes de mudar a posição:

ex:

public void moveSnakeLeft()
    {
        DeleteSnake();
        snake.setPositionX(snake.getPositionX() - 10);
        
        
    }

mas da pra estruturar melhor isso ai...

SirDominque
douglaskd:
nas variaveis da classe GameUpdate criei essa variavel:
Graphics2D Tela;

no Construtor fiz:

Tela = (Graphics2D) mainView.jPanel_GamePanel.getGraphics();

mudei seu método Running e criei um método delete.

public void Running(){

        Tela.drawImage(snake.getSnakeImage(),snake.getPositionX(),snake.getPositionY(),null);

    }
    
    
public void DeleteSnake(){
        
        Tela.clearRect(snake.getPositionX(), snake.getPositionY(), snake.getSnakeImage().getWidth(), snake.getSnakeImage().getHeight()); 
        
    }

chamo DeleteSnake antes de mudar a posição:

ex:

public void moveSnakeLeft()
    {
        DeleteSnake();
        snake.setPositionX(snake.getPositionX() - 10);
        
        
    }

mas da pra estruturar melhor isso ai...

DOUGLAS!!!!!!! Funcionou!!!
Deixa eu te perguntar... Vc saberia dizer pq estava dando errado ? Era porque eu nao estava dando clearRect ? Pq se eu crio uma nova Image... Ela nao deveria ter apagado tudo e criado do começo ?
Mais uma coisa, posso dar um create nesse objeto Tela?

MUiTO OBRIGADO!!!

douglaskd

tem muita técnica que da pra você aplicar ai…

na verdade não sei nem te dizer se a maneira que eu fiz é a melhor maneira…

pega o código do JMario e o código do TowerDefence aqui no guj mesmo.

tem uns lances de GameLoop, sprites, o doublebufferering que ainda não funciona ai no seu.

SirDominque

Valeu Douglas.

Aquilo que eu estava fazendo, nao era ja double buffering ?

O gameloop vou colocar depois… Por enquanto só quero conseguir pintar na tela sem nenhum problema.
Não tem jeito de resetar o jPanel ?

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