Android 2D游戏:谁应该负责调用画布来绘制?

时间:2013-09-09 09:42:14

标签: android multithreading canvas game-loop

在2D教程的在线教程或Android SDK示例中,游戏线程的run()方法中通常有一个绘图函数,它负责在画布上绘图。例如,在经典的Lunar Lander代码中,我们在类LunarThread中有以下代码:

@Override
public void run() {
    while (mRun) {
        Canvas c = null;
        try {
            c = mSurfaceHolder.lockCanvas(null);
            synchronized (mSurfaceHolder) {
                if (mMode == STATE_RUNNING) updatePhysics();
                doDraw(c);
            }
        } finally {
            // ...
        }
    }
}

private void doDraw(Canvas canvas) {
    canvas.drawBitmap(mBackgroundImage, 0, 0, null);
    // ...
}

然而,Android开发指南非常清楚地表明:

  

不要从UI线程外部访问Android UI工具包。

我有两个问题。

  1. 我对' Android UI工具包'的含义感到困惑。由于画布被SurfaceHolder锁定,并且SurfaceHolder持有可接受用户输入的表面(例如触摸事件),因此画布被视为“Android UI工具包”吗?
  2. 这些教程或代码示例是否违反了上述规则?若然,为何这种违法行为可以接受?如果没有,为什么不呢?

0 个答案:

没有答案