2016-02-04 9 views
0

Я хочу нарисовать карту плитки на холсте с помощью метода drawRect(). Проблема состоит в том, что он только рисует первый прямоугольник по координате 0,0. Предположим, что это карта размером 30x20 цветов красного и зеленого цветов. Я планирую сделать змеиную игру.Android Tiles with 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

ответ

1

drawRect(left, top, right, bottom) нарисует из оставил в справа, от сверху до дна. Он не будет рисовать, если разница равна 0 или отрицательная.

Вы тянете из ..

  1. 0 to TILE_SIZE,
  2. TILE_SIZE to TILE_SIZE (ширина/высота == 0)
  3. 2 * TILE_SIZE to TILE_SIZE (ширина/высота фактически становится отрицательным)
  4. ... и so on

Вы должны использовать

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

чтобы получить правильные координаты.

+0

Спасибо, этот ответ сработал! – melkawakibi

0

Ваша проблема в вашей 2-й цикл. Похож на ошибку копирования и вставки. В обоих createTilemap и onDraw, изменить:

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

к:

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

Кроме того, ваши аргументы DrawRect неверны. Они должны быть left,top,right,bottom не left,top,width,height. Попробуйте изменить свой код на этот:

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

Благодарим вас за ответ. – melkawakibi