2011-11-03 4 views
0

J'ai une carte isométrique que je dessine sur la toile. Quand j'essaie de déplacer la carte, ces lignes noires clignotent entre les carreaux, ce qui rend l'ensemble plutôt maussade.Dessiner sur la toile sur Android - scintille/déchire l'écran

Voici le code correspondant de mon fil de mise à jour

public void run() { 
    Canvas c; 
    while (isRunning){ 
     c = null; 
     try { 
      c = cellMap.getHolder().lockCanvas(null); 
      synchronized (cellMap.getHolder()) { 
       cellMap.onDraw(c); 
      } 
     } finally { 
      if(c != null){ 
       cellMap.getHolder().unlockCanvasAndPost(c); 
      } 
     } 
    } 
} 

et de ma CellMap classe (qui s'étend SurfaceView):

public void onDraw(Canvas canvas){ 
    canvas.drawColor(Color.BLACK); 
    int x = 0; 
    int y = 0; 

    for(int i = 0; i < mapSize; i++){ 
     for(int j = 0; j < mapSize; j++){ 
      x = (i-j) * 30 + xOffset; 
      y = (i+j) * 15 + yOffset; 
      mapCells[i][j].draw(canvas, paint, x, y); 
     } 
    } 

mapCells[][] est un tableau d'objets qui contiennent l'image bitmap doit être dessiné. La fonction draw() est seulement 1 ligne canvas.drawBitmap(bitmapImage, x, y, null)

J'ai découvert que le retrait de la ligne Canvas.draw(Color.black) se débarrasse du scintillement. Cependant, lorsque je déplace la carte, la toile n'est pas effacée et je vois toujours l'image des images précédentes. J'imagine que c'est parce que ça prend trop de temps pour dessiner les bitmaps? mais la carte est seulement très petite en ce moment.

Répondre

1

J'ai trouvé le problème. Lorsque vous déplacez la carte, les valeurs de décalage ont été modifiées. Cela conduit à dessiner temporairement des sections de la carte avec des valeurs de décalage différentes - créant le déchirement. hé!

J'ai résolu ceci en copiant les valeurs xOffset et yOffset au début de la méthode onDraw(), et en utilisant ces valeurs pour la mise à jour.

Questions connexes