gpt4 book ai didi

java - Android/Java - 在我绘制的 Canvas 上放大

转载 作者:行者123 更新时间:2023-11-30 04:12:32 25 4
gpt4 key购买 nike

我创建了一个 2D 迷宫,它由 2 组 boolean 数组组成,指的是我迷宫的垂直墙和水平墙。这个迷宫目前是 12 x 12,但我只想显示 5 x 5。

有没有办法将迷宫缩放到用户所在位置的 5 x 5 周围,然后在他们每次移动时简单地显示下一个 block ,因此只显示 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 个不同步骤,以帮助进一步解释我遇到的问题。第一张图片是起点并且已按应有的方式绘制,但是当我开始移动用户围绕线条绘制的圆圈时,线条绘制不正确。

3 differnt user position showing drawLine issue

最后,请看下面我用来绘制位智墙的当前 boolean 数组:

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 }
};

提前致谢

最佳答案

我会使用两个变量,scroll_xscroll_y,您在绘制时使用它们并在移动时进行修改,这样您的迷宫始终被绘制为 5 x 5 并且您使用这两个变量决定了您应该绘制 map 的哪些部分的偏移量。

另外,如果您愿意,您可以实现 zoom_xzoom_y 变量来更改缩放。

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

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

编辑:

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

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

请注意,此代码没有错误检查,如果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);
}
}
}
}

关于java - Android/Java - 在我绘制的 Canvas 上放大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com