Android 安卓:onDraw太慢了
我正在用安卓2.2构建一个游戏。主游戏Android 安卓:onDraw太慢了,android,canvas,surfaceview,ondraw,Android,Canvas,Surfaceview,Ondraw,我正在用安卓2.2构建一个游戏。主游戏活动使用自定义表面视图: class GameView extends SurfaceView 据我所知,onDraw()方法需要执行自己的线程。考虑到这一点,我计划在onDraw()中添加一个背景图像: 但是当我执行游戏时,它变得非常慢。如果我注释掉new Paint()行,游戏速度会加快 是我做错了什么,还是我的问题有解决办法?例如,有没有办法减少对onDraw()的调用次数?或者将XML属性添加到我的自定义SurfaceView类 下面是我如何加载可
活动
使用自定义表面视图
:
class GameView extends SurfaceView
据我所知,onDraw()
方法需要执行自己的线程。考虑到这一点,我计划在onDraw()
中添加一个背景图像:
但是当我执行游戏时,它变得非常慢。如果我注释掉new Paint()
行,游戏速度会加快
是我做错了什么,还是我的问题有解决办法?例如,有没有办法减少对onDraw()
的调用次数?或者将XML
属性添加到我的自定义SurfaceView
类
下面是我如何加载可绘制图像的代码
public Bitmap loadBitmap(String image) {
Bitmap bitmap = null;
try {
int id = R.drawable.class.getField(image).getInt(new Integer(0));
bitmap = BitmapFactory.decodeResource(context.getResources(), id);
// bitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
} catch(Exception ex) {
Log.e("loadBitmap", ex.getMessage());
}
return bitmap;
}
下面是onDraw
方法的代码。
不幸的是,我不能发布所有内容。
油漆。设置颜色(颜色。黑色);
drawRect(0,0,getWidth(),getHeight(),paint);
drawBitmap(gameLevel.getBitmap(),0,0,paint);
//绘制对象(1)320x25
//绘制对象(5)每个50x50
//绘制对象(n)每个15x15,估计
//绘制对象(n)每个50x50
//碰撞检查,在图像工作表上绘制碰撞平铺
//使用canvas.drawText()绘制游戏信息
时间线++;
提前谢谢 您可以尝试加载背景,而不是在尚未加载的情况下加载背景。否则,除了切换到OpenGL之外,您没有什么可以做的 编辑:
Options options = new Options();
options.inDither = false;
options.inJustDecodeBounds = false;
options.inSampleSize = 1;
options.mCancel = false;
options.inPreferredConfig = Config.RGB_565;
bitmap = BitmapFactory.decodeResource(context.getResources(), id, options);
如果这没有帮助,其他原因可能是:
- 您的绘图代码是错误的
- 绘制背景时可以缩放背景
- 你可以在模拟器上运行它
onCreate()
上执行一次。
paint.setColor(Color.BLACK);
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
canvas.drawBitmap(gameLevel.getBitmap(), 0, 0, paint);
// draw object(1) 320x25
// draw object(5) 50x50 each
// draw object(n) 15x15 each, estimate
// draw object(n) 50x50 each
// collision check, draw hit tile on the image sheet
// draw game information using canvas.drawText()
timeLine++;
Options options = new Options();
options.inDither = false;
options.inJustDecodeBounds = false;
options.inSampleSize = 1;
options.mCancel = false;
options.inPreferredConfig = Config.RGB_565;
bitmap = BitmapFactory.decodeResource(context.getResources(), id, options);