Java - Mover dibujo en Canvas

 
Vista:
sin imagen de perfil
Val: 47
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

Mover dibujo en Canvas

Publicado por Camilo (7 intervenciones) el 21/09/2019 15:18:26
Buenas.

Tengo un problema a la hora de "repintar" una imagen (Lo que quiero hacer es mover un dibujo de una imagen por medio de las teclas "Flechas").
El problema es que no he podido cambiar las coordenadas del método drawImage; Tengo un Hilo el cual es el encargado de dibujar lo que es el "mapa" y los personajes (el mapa y el personaje me los dibuja correctamente) pero cuando por medio del método KeyPressed(), cambio las variables X y Y (que son los valores que le doy al drawImage cuando creo el dibujo) para darle movimiento al dibujo no puedo redibujar el dibujo, puesto que este está en un hilo, que a su vez, se encuentra en un bucle while, lo que hace que se dibuje todo el tiempo con las mismas variables X y Y a pesar de que las modifique.
Aquí parte del código:
Creación del dibujo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void dibujarProta(){
    getLapiz().drawImage(getImgProta(), getProta().getX(), getProta().getY(), 40, 40, null);
}
 
public Image getImgProta(){
    if(imgProta == null){
        return imgProta= getVentanaJuego().getImgProta().getImage();
    }
    return imgProta;
}
 
public Graphics getLapiz(){
    if(lapiz == null){
        return lapiz= getVentanaJuego().getCanvasJuego().getGraphics();
    }
    return lapiz;
}

Código donde ejecuto el hilo:

1
2
3
4
5
6
7
8
9
public void dibujar(){
    dibujarTablero();
    dibujarProta();
}
public void run() {
    while(getTablero().getJuegoIniciado()){
        dibujar();
    }
}

Método KeyPressed:

1
2
3
4
5
6
7
8
public void keyPressed(KeyEvent inKey) {
    switch(inKey.getKeyCode()){
    case KeyEvent.VK_UP:
        modelo.getProta().setMoviendoseUp(true);
        modelo.getProta().setY(modelo.getProta().subir(modelo.getProta().getY()));
        break;
}
}


el objeto Modelo es un objeto de tipo de la clase donde se alojan los métodos de dibujo e hilo. Además he impreso la variable Y, y efectivamente me la modifica, el problema está en que no he podido modificar las variables en el método donde hago el dibujo para que se mueva.
Código donde cambio las coordenadas de X y Y:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int subir(int y){
    return y-= 10;
}
 
 
public int bajar(int y){
    return y+= 10;
}
 
public int derecha(int x){
    return x+= 10;
}
 
public int izquierda(int x){
    return x-= 10;
}


He tratado llamando de nuevo al método dibujarProta(), pero me bota un nullPointerException, cosa que tampoco entiendo por qué.
También traté creando una clase que hereda de canvas (Protagonista) en donde sobrescribo el método Paint(), sin embargo, me bota un nullPointerException en la línea donde realizo el dibujo (en el método Paint()):

1
2
3
4
5
6
7
8
9
10
11
12
public void paint(Graphics lapiz){
    lapiz.drawImage(modelo.getImgProta(), x, y, 40, 40, null);
}
public Protagonista(){
    moviendoseUp= false;
    moviendoseDown= false;
    moviendoseRight= false;
    moviendoseLeft= false;
    x= 50;
    y= 50;
    modelo = new Modelo();
}


Cambio el método dibujar():

1
2
3
4
public void dibujar(){
    dibujarTablero();
    getProta().paint(getLapiz());
}

y el método KeyPressed():

1
2
3
4
5
6
7
8
9
public void keyPressed(KeyEvent inKey) {
    switch(inKey.getKeyCode()){
    case KeyEvent.VK_UP:
        modelo.getProta().setMoviendoseUp(true);
        modelo.getProta().setY(modelo.getProta().subir(modelo.getProta().getY()));
        modelo.getProta().paint(modelo.getLapiz());
        break;
    }
}

De antemano Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder