一些背景:
我正在创建一个Android游戏,在背景图像的画布上绘制迷宫,这使用方块,因此迷宫总是自动放大到5 x 5平方,迷宫可能是20 x 20.通过简单地运行一组for循环然后在相关位置绘制线来绘制迷宫.这一切都很完美,但是我的问题是让我的onDraw顺利运行.这是因为每次我无效的事实我必须重新运行for look并运行各种if语句来检查位置(不幸的是这个过程无法改进).
问题:
我想重新编写我的迷宫画在画布上的方式,下面是我需要实现的3个主要功能:
1 – 将整个迷宫画到画布上(这很容易)
2 – 放大迷宫,只显示5 x 5
3 – 移动角色(总是在屏幕中心)并绘制迷宫的下一个区域
现在如上所述绘制整个迷宫很容易,并且会使onDraw显着更快,因为它们不需要在invaldate上运行for循环,它可以在首次加载时执行一次.
就第2点和第2点而言3,我看到这个工作的方式是在画布中间绘制的charcacter然后是附加/链接到角色运动的2d鸟眼视图相机.此相机还需要放大到只显示整个迷宫网格的5 x 5的程度.然后当charcater移动时,相机随角色移动并显示已经绘制的迷宫的下一部分.我已经尝试了一些事情并做了一些研究但是我之前从未使用过画布,也不知道从哪里开始,如果这是可能的话.
因此,总结问题的主要部分是它们是否是将鸟眼视图相机链接到放大并随角色图像移动的角色的方式.
下面是关于如何绘制迷宫的片段,使用2组for循环检查2组布尔数组[] [],它只存储要绘制的垂直和horixaonl线.
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, 100, background);
RectBackground.set(0,0, FullScreenWidth, FullScreenWidth);
canvas.drawBitmap(gameBackground, null, RectBackground, null);
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
float x = j * totalCellWidth;
float y = i * totalCellHeight;
indexY = i + currentY;
indexX = j + currentX;
// Draw Verticle line (y axis)
if (indexY < vLength && indexX < vLines[indexY].length && vLines[indexY][indexX])
{
RectOuterBackground.set((int)x + (int)cellWidth, (int)y, (int)x + (int)cellWidth + 15, (int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
// Draws Horizontal lines (x axis)
if (indexY < hLength && indexX < hLines[indexY].length && hLines[indexY][indexX])
{
RectOuterBackground.set((int)x, (int)y + (int)cellHeight,(int)x + (int)cellWidth + 15,(int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
}
}
}