首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >画布OnDraw方法

画布OnDraw方法
EN

Stack Overflow用户
提问于 2012-07-03 19:49:04
回答 1查看 541关注 0票数 0

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

迷宫每次仅显示数组中的5个布尔。然后,我有一个始终居中的用户,当他在迷宫中移动时,将绘制下一组布尔。这是它应该工作的。

我遇到的问题是:当用户移动到迷宫的某个部分时,for循环绘制的线条会比布尔数组更高,从而使应用程序崩溃。请在下面找到一些代码片段。

onDraw:

代码语言:javascript
复制
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-移动-

代码语言:javascript
复制
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;
}

如果还有什么我需要澄清的,请让我知道。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-03 21:05:35

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

因此,将值限制为Math.min(current + 6,array.length)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11310279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档