基于平铺的地图滞后使用for-loop绘制,安卓游戏编程

时间:2014-01-31 07:11:45

标签: java android 2d

我想知道是否有人可以帮助我更好地为我的安卓游戏绘制平铺地图。

目前,我使用for循环将所需的位图绘制到屏幕上,但是当我需要立即渲染的瓷砖数量(足以覆盖屏幕和更多)时,当地图滚动时,您可以注意到地图因其移动而变得混乱,因为for循环必须遍历所有切片。瓷砖的绘制类似于:

for(int i = 0; i < 170; i++) {  
        canvas.drawBitmap(bitmap, x + i * bitmap.getWidth(), y, null);  
    }

我目前使用的方法使用几个位图来节省内存,并将它们绘制在不同的位置。

我可以想到绘制地图的另一种方法是从图块创建更大的位图,并移动更大位图的位置以创建移动。这个问题是需要大量内存并且内存不足。

所以,我需要尝试找出一种绘制多个图块的方法,最好不使用for循环(我相信for循环会导致地图的颠簸,不平滑的移动)。

更多细节请问,谢谢。

2 个答案:

答案 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所以有机会我做了语法恐怖^^