Canvas OnDraw方法

我目前正在使用一对布尔数组(水平和垂直)创建一个迷宫,以便为迷宫绘制线条。

迷宫中只有一次显示5个来自arrays的bool。 然后,我有一个总是居中的用户,当他在迷宫中移动时,会绘制下一组bool。 这是应该的。

我遇到的问题是:当用户移动到迷宫的某个部分时,for循环绘制线条变得高于bool数组,因此崩溃应用程序。 请在下面找到一些代码段。

onDraw:

protected void onDraw(Canvas canvas) { canvas.drawRect(0, 0, width, height, background); int currentX = maze.getCurrentX(),currentY = maze.getCurrentY(); int drawSizeX = 6 + currentX; int drawSizeY = 6 + currentY; currentX = currentX - 2; currentY = currentY - 2; for(int i = 0; i < drawSizeX - 1; i++) { for(int j = 0; j < drawSizeY - 1; j++) { float x = j * totalCellWidth; float y = i * totalCellHeight; if(vLines[i + currentY][j + currentX]) { canvas.drawLine(x + cellWidth, //start X y, //start Y x + cellWidth, //stop X y + cellHeight, //stop Y line); } if(hLines[i + currentY][j + currentX]) { canvas.drawLine(x, //startX y + cellHeight, //startY x + cellWidth, //stopX y + cellHeight, //stopY line); } } //draw the user ball canvas.drawCircle((2 * totalCellWidth)+(cellWidth/2), //x of center (2 * totalCellHeight)+(cellWidth/2), //y of center (cellWidth*0.45f), //radius ball); } 

编辑1 – 移动 –

 public boolean move(int direction) { boolean moved = false; if(direction == UP) { if(currentY != 0 && !horizontalLines[currentY-1][currentX]) { currentY--; moved = true; } } if(direction == DOWN) { if(currentY != sizeY-1 && !horizontalLines[currentY][currentX]) { currentY++; moved = true; } } if(direction == RIGHT) { if(currentX != sizeX-1 && !verticalLines[currentY][currentX]) { currentX++; moved = true; } } if(direction == LEFT) { if(currentX != 0 && !verticalLines[currentY][currentX-1]) { currentX--; moved = true; } } if(moved) { if(currentX == finalX && currentY == finalY) { gameComplete = true; } } return moved; } 

如果还有其他需要澄清的内容,请告诉我。

提前致谢。

当currentX / Y足够高时(length-6),数组上的drawSizeX / Y索引

所以将值限制为Math.min(当前+ 6,array.length)