Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android/Java-在我绘制的画布上放大_Java_Android_Camera_Zooming_Maze - Fatal编程技术网

Android/Java-在我绘制的画布上放大

Android/Java-在我绘制的画布上放大,java,android,camera,zooming,maze,Java,Android,Camera,Zooming,Maze,我已经创建了一个二维迷宫,它由两组布尔数组组成,参考了迷宫的垂直面和水平面。这个迷宫目前是12 x 12,但是我只想显示5 x 5 是否有一种方法可以将迷宫缩放到用户所在位置的5 x 5圆周,然后在每次移动时显示下一个块,因此仅显示5 x 5 理想情况下,我想坚持把整个东西画出来,然后简单地进行鸟瞰视图缩放(这将提高可用性,通常会加快应用程序的速度) 编辑 下面是我目前用来画迷宫的代码。但是,在我移动用户圈时,下面的代码似乎没有绘制正确的v和hline public void onDraw(Ca

我已经创建了一个二维迷宫,它由两组布尔数组组成,参考了迷宫的垂直面和水平面。这个迷宫目前是12 x 12,但是我只想显示5 x 5

是否有一种方法可以将迷宫缩放到用户所在位置的5 x 5圆周,然后在每次移动时显示下一个块,因此仅显示5 x 5

理想情况下,我想坚持把整个东西画出来,然后简单地进行鸟瞰视图缩放(这将提高可用性,通常会加快应用程序的速度)

编辑 下面是我目前用来画迷宫的代码。但是,在我移动用户圈时,下面的代码似乎没有绘制正确的v和hline

public void onDraw(Canvas canvas) 
{
    canvas.drawRect(0, 0, width, height, background);
    mazeSizeX = 5 + maze.getCurrentX();
    mazeSizeY = 5 + maze.getCurrentY();
    for(int i = maze.getCurrentX(); i < mazeSizeX; i++) 
    {
        for(int j = maze.getCurrentY(); j < mazeSizeY; j++){
            float x = j * totalCellWidth;
            float y = i * totalCellHeight;
            if(j < mazeSizeX -1 && vLines[i][j]) {
                //we'll draw a vertical line
                canvas.drawLine(x + cellWidth,   //start X
                                y,               //start Y
                                x + cellWidth,   //stop X
                                y + cellHeight,  //stop Y
                                line);
            }
            if(i < mazeSizeY -1 && hLines[i][j]) {
            //we'll draw a horizontal line
                canvas.drawLine(x,               //startX 
                                y + cellHeight,  //startY 
                                x + cellWidth,   //stopX 
                                y + cellHeight,  //stopY 
                                line);
            }
        }
    }
}

提前感谢

我将使用两个变量,
scroll_x
scroll_y
,这两个变量在绘制和移动时使用,以便迷宫始终绘制为5 x 5,您可以使用这两个变量来确定应该绘制的地图部分的偏移量

此外,如果愿意,还可以实现
zoom_x
zoom_y
变量来更改缩放

由于您使用的是onDraw方法,因此排除了我所能想到的“一次绘制所有内容并移动地图”的任何可能性

根据你对问题的描述,这是目前我能给出的最好答案

编辑:

现在,您已经提供了更多信息,下面是为您重新设计的onDraw:

在下面的函数中,如果迷宫大于5 x 5,我使用了
maze.scrollX
maze.scrollY
作为滚动偏移。我还添加了
drawSize
属性来定义您要绘制的尺寸。如果你在地图的左上角,这两个都应该设置为零。我自己还没有测试过这段代码,所以请告诉我它是如何工作的

请注意,此代码没有错误检查,如果
maze.scrollX
太大,则会导致错误

public void onDraw(Canvas canvas) 
{
    canvas.drawRect(0, 0, width, height, background);
    int drawSizeX = 5;
    int drawSizeY = 5;
    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 + maze.scrollX][j + maze.scrollY]) {
                //we'll draw a vertical line
                canvas.drawLine(x + cellWidth,   //start X
                                y,               //start Y
                                x + cellWidth,   //stop X
                                y + cellHeight,  //stop Y
                                line);
            }
            if(hLines[i + maze.scrollX][j + maze.scrollY]) {
            //we'll draw a horizontal line
                canvas.drawLine(x,               //startX 
                                y + cellHeight,  //startY 
                                x + cellWidth,   //stopX 
                                y + cellHeight,  //stopY 
                                line);
            }
        }
    }
}
public void onDraw(画布)
{
canvas.drawRect(0,0,宽度,高度,背景);
int-drawSizeX=5;
int-drawSizeY=5;
对于(int i=0;i
我会使用两个变量,
scroll\u x
scroll\u y
,在绘制时使用,在移动时进行修改,以便迷宫始终绘制为5 x 5,您可以使用这两个变量来确定应该绘制的地图部分的偏移量

此外,如果愿意,还可以实现
zoom_x
zoom_y
变量来更改缩放

由于您使用的是onDraw方法,因此排除了我所能想到的“一次绘制所有内容并移动地图”的任何可能性

根据你对问题的描述,这是目前我能给出的最好答案

编辑:

现在,您已经提供了更多信息,下面是为您重新设计的onDraw:

在下面的函数中,如果迷宫大于5 x 5,我使用了
maze.scrollX
maze.scrollY
作为滚动偏移。我还添加了
drawSize
属性来定义您要绘制的尺寸。如果你在地图的左上角,这两个都应该设置为零。我自己还没有测试过这段代码,所以请告诉我它是如何工作的

请注意,此代码没有错误检查,如果
maze.scrollX
太大,则会导致错误

public void onDraw(Canvas canvas) 
{
    canvas.drawRect(0, 0, width, height, background);
    int drawSizeX = 5;
    int drawSizeY = 5;
    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 + maze.scrollX][j + maze.scrollY]) {
                //we'll draw a vertical line
                canvas.drawLine(x + cellWidth,   //start X
                                y,               //start Y
                                x + cellWidth,   //stop X
                                y + cellHeight,  //stop Y
                                line);
            }
            if(hLines[i + maze.scrollX][j + maze.scrollY]) {
            //we'll draw a horizontal line
                canvas.drawLine(x,               //startX 
                                y + cellHeight,  //startY 
                                x + cellWidth,   //stopX 
                                y + cellHeight,  //stopY 
                                line);
            }
        }
    }
}
public void onDraw(画布)
{
canvas.drawRect(0,0,宽度,高度,背景);
int-drawSizeX=5;
int-drawSizeY=5;
对于(int i=0;i
如果你不知道你今天是怎么做的,很难回答这个问题。我基本上有一个布尔数组,例如true、true、false等,true会画一条实线false nothing。这些将被用作墙壁迷宫。然后我触发一个onDraw立即创建整个迷宫,然后