我想知道是否有人可以帮助我更好地为我的安卓游戏绘制平铺地图。
目前,我使用for循环将所需的位图绘制到屏幕上,但是当我需要立即渲染的瓷砖数量(足以覆盖屏幕和更多)时,当地图滚动时,您可以注意到地图因其移动而变得混乱,因为for循环必须遍历所有切片。瓷砖的绘制类似于:
for(int i = 0; i < 170; i++) {
canvas.drawBitmap(bitmap, x + i * bitmap.getWidth(), y, null);
}
我目前使用的方法使用几个位图来节省内存,并将它们绘制在不同的位置。
我可以想到绘制地图的另一种方法是从图块创建更大的位图,并移动更大位图的位置以创建移动。这个问题是需要大量内存并且内存不足。
所以,我需要尝试找出一种绘制多个图块的方法,最好不使用for循环(我相信for循环会导致地图的颠簸,不平滑的移动)。
更多细节请问,谢谢。
答案 0 :(得分:0)
for循环是绘制它的正确方法,您的问题可能是您尝试在一帧中绘制的数据量和/或您尝试通过系统推送的像素数。
如果您想在Android上获得良好的性能,最好的选择是使用它提供的图形硬件。有各种各样的游戏框架可以让您更轻松,并为您提供比其他方式更好的性能。
如果没有那么你将需要打破绘图并仍然运行相同的有效逻辑,但展开,这样你每帧绘制几个图块。
答案 1 :(得分:0)
是否真的需要立即绘制所有瓷砖?
如果你有可能,也许你可以确定'可见视图端口',然后只绘制那些需要绘制的图块?!
int width = getWidth()/Tiles.width; // do it once before any rendering
// thats the amount of tiles per line
int height = getHeight()/Tiles.height; // do it once before any rendering
// thats the amount of tiles per row
Point pos = ...; // you should know the position of your 'figure' within the map
// could as well be the scroll position
//now draw only those tile from the 'viewport':
for (int dy = 0; dy < width; dy++){
for (int dx = 0; dy < height; dy++){
int xOnMap = pos.x + x;
int yOnMap = pos.y + dy;
int index = yOnMap*height+yOnMap; //index in list
canvas.drawBitmap(bitmap,
x * bitmap.getWidth(), y * bitMap.getHeight(), null);
}
}
所以你只需要绘制一些瓷砖,这将总是相同的数量......
我必须承认我写了代码onstackoverflow所以有机会我做了语法恐怖^^