我有一个游戏,应该在画布上绘制许多形状,并且在每帧中这些形状的位置都会改变,游戏运行平稳,但是添加更多形状后会出现一些尖刺而掉落一些帧。而这仅发生在高密度设备(320 dpi以上)中。
因为形状具有不同的位置,所以我想在多线程中绘制它们,或者以一种代码无需等待绘制的方式来绘制它们。
public void run() {
while (mRunning) {
if (mSurfaceHolder.getSurface().isValid()) {
synchronized (mSurfaceHolder){
canvas = mSurfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);
drawOnCanvas(canvas);
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
绘图功能
public void drawOnCanvas(Canvas canvas) {
new Thread(changeGamePosRunnable).start();
for (int i = 0; i < obstacles.size(); i++) {
Obstacle obstacle = obstacles.get(i);
x= obstacle.getX();
y=obstacle.getY();
// how to run these 2 functions in a new thread to get more speed on drawing
canvas.drawLine(0, 0, x, y, linePaint);
canvas.drawBitmap(bitmap,x,y,null);
}
}
创建新线程并传递数据必须是最终的,这也使我感到困惑,编译器还会引发异常
我对android开发非常陌生,所以如果我选择优化性能的方法不正确,请指导我如何改善绘图性能。
信息:我已经在构造函数中创建了位图,使用SurfaceView
初始化了游戏循环之外的所有变量,并实现了Runnable
,将Thread.sleep(5);
添加到了while循环中,试图减少位图大小大约为240个字节,尝试再次绘制圆圈而不是位图。