我的游戏是基于农场的例子。这是我正在使用的运行循环(非常类似于lunarlander中使用的运行循环)。即使我几乎什么都没画,我的绘画也会遇到相当大的性能问题。
我注意到以下方法。为什么要创建画布并在每个循环中设置为空?
@Override
public void run()
{
while (mRun)
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();//null
synchronized (mSurfaceHolder)
{
updatePhysics();
doDraw(c);
}
} finally
{
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null)
{
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
我大多数时候都读过关于画布的任何内容,它更像是:
mField = new Bitmap(...dimensions...);
Canvas c = new Canvas(mField);
我的问题是:为什么Google的例子就是这样做的(null canvas),有什么好处,有没有更快的方法呢?
答案 0 :(得分:2)
在你的例子中,你确实制作了一个新画布。但是当你说
时为什么要创建画布并在每个循环中设置为空?
我认为不会发生这种情况。创建了'a'画布(变量),并为初学者设置为null。这就是所谓的
c = mSurfaceHolder.lockCanvas();
返回使用的画布。 (见http://developer.android.com/reference/android/view/SurfaceHolder.html#lockCanvas%28%29)
没有像您似乎建议的那样创建“新画布”。如果出现问题,c保持为空,您可以检查它。如果它不为空,则执行解锁。
答案 1 :(得分:0)
也许你没有像在月球示例中那样在单独的线程中进行绘图。