gpt4 book ai didi

java - 绘制基于图 block 的 map

转载 作者:搜寻专家 更新时间:2023-11-01 07:37:31 26 4
gpt4 key购买 nike

此脚本绘制控件、英雄、表面和 map :

public void render(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);

Drawable myImage;

int tileWidth = 50;
int tileHeight = 50;

int rowBaseX = 0;
int rowBaseY = 0;

int[][] board = new int[][] {
{0,0,0,0,0,0,2,0,0,0,},
{0,0,0,0,0,2,2,0,0,0,},
{0,0,0,0,0,2,0,0,0,0,},
{0,0,0,0,0,2,0,0,0,0,},
{0,0,0,2,2,2,0,0,0,0,},
{0,0,0,2,0,0,0,0,0,0,},
{0,0,0,2,0,0,0,0,0,0,},
{0,0,2,2,0,0,0,0,0,0,},
{0,0,2,0,0,0,0,0,0,0,},
{0,0,2,0,0,0,0,0,0,0,}
};
int mapWidth = 10;
int mapHeight = 10;

for (int row = 0; row < mapHeight; row++)
{

for (int col = 0; col < mapWidth; col++)
{
Resources res = this.getContext().getResources();

switch(board[row][col])
{
case 0:
myImage = res.getDrawable(R.drawable.tile1);
break;
case 1:
myImage = res.getDrawable(R.drawable.tile2);
break;
default:
myImage = res.getDrawable(R.drawable.tile3);
break;
}

int curL = rowBaseX + (col * tileWidth);
int curU = rowBaseY + (row * tileHeight);
int curR = curL + tileWidth;
int curD = curU + tileHeight;

myImage.setBounds(curL,curU,curR,curD);
myImage.draw(canvas);
}
}

droid.draw(canvas);
butt.draw(canvas);
butt1.draw(canvas);
butt2.draw(canvas);
butt3.draw(canvas);
buttz.draw(canvas);
buttz1.draw(canvas);
buttz2.draw(canvas);
buttz3.draw(canvas);
buttx.draw(canvas);
}

有一个英雄,当玩家用控件移动他时必须重新绘制,所有其他可绘制对象也必须重新绘制。问题是绘制 map 是一个漫长的过程,所以我创建的 map 越大,英雄移动就越慢,因为 map 的每一 block 都必须绘制。有没有办法在其他方法中将所有图 block 放入一个位图并在 Canvas 方法中绘制该位图?

最佳答案

如果无法在您的应用程序外部创建静态 map ,您可以将静态内容的绘制与动态内容分开。

创建一个 Bitmap,用它创建一个 Canvas 并在该 Canvas 上绘制您的 map 。你只需要这样做一次。在另一个 Canvas 上每帧渲染一次动态内容。然后在 SurfaceView 的“真实”Canvas 上绘制两个 Bitmap。它可能看起来像这样:

每张 map 一次的部分:

Bitmap mapBitmap = Bitmap.createBitmap(width, height, myConfig);
Canvas c = new Canvas(mapBitmap);
//draw map on c

...以及每帧一次的部分:

//draw dynamic stuff    
Canvas canvas = getHolder().lockCanvas();
canvas.drawBitmap(mapBitmap, null, targetRect, null);
canvas.drawBitmap(heroBitmap, null, targetRect, null);
getHolder().unlockCanvasAndPost();

编辑:

您可以像以前使用 myImage.draw(canvas) 一样绘制图 block ,但将 mapBitmap-Canvas 作为参数而不是“真实” Canvas 传递。 myConfig 必须是 Bitmap.Config .采用 RGB_565,因为它是内部格式。

关于java - 绘制基于图 block 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715159/

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