我正在学习为Android编程。我做了几个基本的游戏,但为了学习,我想制作一款汽车驾驶游戏。我认为这样做最简单的方法是将汽车保持在屏幕中间,并滚动背景以给出移动幻觉。我的滚动位图画布太慢,无法使用
作为找出引擎的实验,我创建了一个2048x1200的位图,我从PNG中加载。这将是地图。然后我从屏幕上显示的地图上创建一个1024x600的新位图。我这样做getWidth()& getHeight()给这些尺寸。我每次都会根据移动在屏幕上显示不同的作物。
不幸的是我觉得这个速度太慢,无法使用。如果我想要平稳的话,汽车将不得不以蜗牛的速度移动。我得到约18fps。
我使用James Daniello's Simple Game Loop
我也看了下面的栈溢出的文章,其称,以保持对象创建了主循环的尽可能多的,这我尽我所能做的事情。
How to draw lots of bitmaps on screen in an Android game without slow performance
也使用的是这篇文章罗曼盖伊上保持位图的格式相同屏幕来阻止它有要转化的画面,这是非常昂贵的上显示。
Bitmap quality, banding and dithering
我想在使用OpenGL之前弄清楚使用Canvas和Bitmaps可以实现的最佳效果。我是否受到限制,还是应该采取不同的行动?我发现每次滚动地图1px时都会获得18fps的平滑滚动效果。
private Bitmap track;
private Bitmap visible;
private Point position;
private int fps = 0;
private long lastFpsTime = 0;
private int fpsCount = 0;
Paint pText;
public void Draw(Canvas c){
visible = Bitmap.createBitmap(track, position.x + 512, position.y + 300, 512, 300);
position.x++;
c.drawBitmap(visible, 0,0, null);
c.drawText("FPS: " + fps, 10, 10, pText);
}
public void Init(Resources resources) {
// Load Map from track1.png
track = Bitmap.createBitmap(2048, 1200, Bitmap.Config.RGB_565);
Bitmap track1 = BitmapFactory.decodeResource(resources, R.drawable.track1);
track = track1.copy(Bitmap.Config.RGB_565, true);
position = new Point(0,0);
//Setup the Text Paint Object
pText = new Paint();
pText.setColor(Color.WHITE);
pText.setStyle(Style.FILL_AND_STROKE);
}
public void Update() {
fpsCount++;
if (System.currentTimeMillis() - lastFpsTime >= 1000){
lastFpsTime = System.currentTimeMillis();
fps = fpsCount;
fpsCount = 0;
}
}
非常感谢你,我现在高达50-55 fps这是更可以接受的。我知道我不应该使用createBitmap,因为它是昂贵的,但我错误地认为我没有选择。我认为drawBitmap和createBitmap在底层做了同样的事情。显然不是。 – pholcroft