目前我正在尝试使用SurfaceView进行带动画的国际象棋游戏。我在模拟器中只获得了大约8 FPS。我画了一个国际象棋棋盘和32个国际象棋棋子并旋转一切(看它有多顺畅),我正在使用抗锯齿。在Droid我得到大约20FPS,所以它不是很顺利。是否有可能实现一个非常稀缺和简单的动画游戏,而不必使用OpenGL?
这就是我每一帧所做的事情:
// scale and rotate
matrix.setScale(scale, scale);
rotation += 3;
matrix.postRotate(rotation, 152, 152);
canvas = surfaceHolder.lockCanvas();
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG));
canvas.setMatrix(matrix);
canvas.drawARGB(255, 255, 255, 255); // fill the canvas with white
for (int i = 0; i < sprites.size(); i++) {
sprites.get(i).draw(canvas); // draws chessboard and chess pieces
}
答案 0 :(得分:3)
我决定在创建SurfaceView时预缩放所有位图。现在我根本不需要使用转换矩阵。我在模拟器和实际设备(Droid)上获得了超过30 FPS,它非常流畅。我还删除了canvas.drawARGB(255, 255, 255, 255);
,这使得FPS增加了大约5。
答案 1 :(得分:0)
我们可以看到更多代码吗?你的棋子图标大小是多少?您可以考虑降低其质量以减少抽取时间。您还可以限制要加载的图标数量(为每种颜色加载一种类型),然后使用矩阵存储要为每个方块加载的图标类型。