Android - Problema con SurfaceView

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 338 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con SurfaceView

Publicado por Bocho (1 intervención) el 30/11/2019 13:02:01
Esta es mi primera pregunta en este foro! Estoy intentando dibujar un tablero con una surfaceView. El problema es que si cada vez dibujo el tablero y los gameObjects(las fichas de los jugadores) se me ralentiza un montón. He intentado que dibuje el tablero la primera vez solo con un surfaceCreated y los gameObjects en el run() del thread al cual voy llamando. No para de parpadear todo el rato la pantalla y aparecer imágenes repetidas. Lo ideal sería que dibujara el fondo una vez y después solo las fichas de los jugadores que son las que se mueven, conservando el fondo claro.

Os pongo un trozo del codigo para que sea más claro.

-Parte surfaceCreated:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
holder.addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        if (holder.getSurface().isValid()) {
            canvas = holder.lockCanvas();
            drawTablero(canvas);
            holder.unlockCanvasAndPost(canvas);
        }
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
 
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
 
    }
});

-Parte del run():
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Override
public void run() {
    if (game == null) {
        return;
    }
 
 
    handler.postDelayed(this, 1000 / 15);
    this.invalidate();
 
    draw();
    game.physics();
    game.processInput();
    touches.clear();
}
 
 
protected void draw() {
    if (holder.getSurface().isValid()) {
        canvas = holder.lockCanvas();
        if (game == null) {
            holder.unlockCanvasAndPost(canvas);
            return;
        } else {
            game.draw(canvas);
            holder.unlockCanvasAndPost(canvas);
        }
    }
 
}

Muchas 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