java canvas 缩放图片_java – Android – Canvas onDraw在角色移动后使用缩放的camara

一些背景:

我正在创建一个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);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值