2016-02-04 2 views
0

Je veux dessiner une carte de tuiles sur un canevas avec la méthode drawRect(). Le problème est qu'il dessine seulement le premier rectangle sur la coordonnée 0,0. C'est supposé être une carte de carreaux 30x20 des couleurs rouge et vert. Je prévois de faire un jeu de serpent.Tuiles Android avec drawRect

Tile.java

public class Tile extends View{ 

    private final int TILE_SIZE = 16; 
    private static int[][] tileMap; 
    private static int rows, columns; 

    public Tile(Context context) { 
     super(context); 
     createTilemap(); 
    } 

    public void createTilemap(){ 
     tileMap = new int[30][20]; 
     rows = tileMap.length; 
     columns = tileMap[1].length; 
     Random r = new Random(); 

     for (int i = 0; i < rows; i++){ 
      for (int j = 0; j < columns; j++){ 
       tileMap[i][j] = r.nextInt(2); 
      } 
     } 
    } 

    public Tile(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     Paint p = new Paint(); 

     for (int i = 0; i < rows; i++){ 
      for (int j = 0; j < columns; j++){ 

       int pos_i = TILE_SIZE * i; 
       int pos_j = TILE_SIZE * j; 

       switch (tileMap[i][j]){ 

        case 0: 
         p.setColor(Color.GREEN); 
         canvas.drawRect(pos_i, pos_j, TILE_SIZE, TILE_SIZE, p); 
         break; 
        case 1: 
         p.setColor(Color.RED); 
         canvas.drawRect(pos_i, pos_j, TILE_SIZE, TILE_SIZE, p); 
         break; 

       } 
      } 
     } 
    } 
} 

activity_main.xml

<com.example.mohamed.snake.Tile 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

enter image description here

Répondre

1

drawRect(left, top, right, bottom) attireront de gauche - droite, de haut - bas. Il ne tirera pas si la différence est 0 ou négative.

Vous dessin de ..

  1. 0 to TILE_SIZE,
  2. TILE_SIZE to TILE_SIZE (largeur/hauteur == 0)
  3. 2 * TILE_SIZE to TILE_SIZE (largeur/hauteur devient réellement négative)
  4. ... et ainsi de suite

Vous devez utiliser

canvas.drawRect(pos_i, pos_j, pos_i + TILE_SIZE, pos_j + TILE_SIZE, p); 

pour obtenir les coordonnées correctes.

+0

Merci, cette réponse a fonctionné! – melkawakibi

0

Votre problème est dans votre 2ème boucle. On dirait une erreur de copier-coller. Dans les deux createTilemap et onDraw, changer:

for (int j = 0; i < columns; i++) 

à:

for (int j = 0; j < columns; j++) 

En outre, vos arguments à drawRect ont tort. Ils doivent être left,top,right,bottom et non left,top,width,height. Essayez de changer votre code à ceci:

canvas.drawRect(pos_i, pos_j, pos_i + TILE_SIZE, pos_j + TILE_SIZE, p); 
+0

Merci pour votre réponse. – melkawakibi