我创建了一个2D迷宫,它由2组布尔数组组成,参考迷宫的垂直和水平墙。这个迷宫目前是12 x 12,但我只想要显示5 x 5。
有没有办法将迷宫缩放到用户所在位置的5 x 5周围,然后每次移动时只显示下一个块,因此只显示5 x 5。
理想情况下,我想坚持把整个事情画出来,然后简单地进行某种鸟眼视图缩放(这样可以提高可用性并加快应用程序的速度)。
修改的 以下是我目前用于绘制迷宫的代码。但是,当我移动用户圈时,下面的代码似乎没有绘制正确的v和hLines。
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);
}
}
}
}
注意 - mazeSizeX和Y最初设置为5.任何关于我出错的地方的任何进一步指导将非常感激。
编辑2: 请参阅下面的图像,以指示用户可能采取的3个不同步骤,以帮助进一步解释我遇到的问题。第一个图像是起始点,并且已按原样绘制,但是当我开始移动用户圈时,线条未正确绘制。
最后,请参阅下面我正在使用的当前布尔数组以绘制waze墙:
boolean[][] vLines = new boolean[][]{
{true ,false,false,false,true ,false,false},
{true ,false,false,true ,false,true ,true },
{false,true ,false,false,true ,false,false},
{false,true ,true ,false,false,false,true },
{true ,false,false,false,true ,true ,false},
{false,true ,false,false,true ,false,false},
{false,true ,true ,true ,true ,true ,false},
{false,false,false,true ,false,false,false}
};
boolean[][] hLines = new boolean[][]{
{false,false,true ,true ,false,false,true ,false},
{false,false,true ,true ,false,true ,false,false},
{true ,true ,false,true ,true ,false,true ,true },
{false,false,true ,false,true ,true ,false,false},
{false,true ,true ,true ,true ,false,true ,true },
{true ,false,false,true ,false,false,true ,false},
{false,true ,false,false,false,true ,false,true }
};
提前致谢
答案 0 :(得分:1)
我会使用两个变量,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);
}
}
}
}