Java 在Android上优化画布绘制
我不确定为什么我的代码(有点)滞后,并且不能以同样的速度可靠地运行——我想我一定是做错了什么,因为许多其他游戏都是完全流畅的。 我的Renderer类中的相关代码如下所示:Java 在Android上优化画布绘制,java,android,bitmap,android-canvas,Java,Android,Bitmap,Android Canvas,我不确定为什么我的代码(有点)滞后,并且不能以同样的速度可靠地运行——我想我一定是做错了什么,因为许多其他游戏都是完全流畅的。 我的Renderer类中的相关代码如下所示: public void drawPicString(Location location, String string, RenderParams params) { //canvas.save(); float rawX = location.getX(); float rawY =
public void drawPicString(Location location, String string,
RenderParams params) {
//canvas.save();
float rawX = location.getX();
float rawY = location.getY();
Bitmap rawbit = myImageCache.get(string);
//Bitmap rawbit = provider.getBitmap(string);
float thisWidth = rawbit.getWidth();
float thisHeight = rawbit.getHeight();
if(params.shouldResize){
thisWidth = params.resizex;
thisHeight = params.resizey;
}
float leftx = rawX-(thisWidth/2);
float topy = rawY-(thisHeight/2);
Matrix matrix = new Matrix();
matrix.setTranslate(leftx, topy);
if(params.shouldResize){
float toScaleY = ((float)thisHeight)/rawbit.getHeight();
float toScaleX = ((float)thisWidth)/rawbit.getWidth();
matrix.preScale(toScaleX, toScaleY);
}
if(params.shouldRotate){
matrix.preRotate((float)Math.toDegrees(params.myangle),(float)(thisWidth/2.0),(float)(thisHeight/2.0));
}
canvas.drawBitmap(rawbit, matrix, paint);
}
我能想到的唯一其他相关信息是myImageCache是位图的缓存,因此它不必每次绘制位图时都从资源中获取它们。“canvas”是surfaceview上的画布绘图,在绘图开始之前,它会在每一帧传递给它
提前感谢您的任何想法 params.shouldResize或params.shouldRotate是否为真?如果是这样,您可能希望缓存矩阵,除非由于更改而需要重新计算。这取决于每个绘图。。不过,每一帧的旋转都不同,所以我认为缓存矩阵只会填满内存(加上每一帧每个对象的转换都不同)。请注意,大多数游戏使用OpenGL绘图,这比画布绘图快得多。正如DigitalGhost所说,重复使用一个声明的矩阵,因为每帧创建一个新矩阵都会触发GC,这会导致延迟。我会尝试从中去掉矩阵部分,看看这是否是性能瓶颈。我猜整个图像上的矩阵运算是导致速度减慢的原因