我一直在关注教程here。
到目前为止,我有一个Gameview和一个Gameloop(一个线程)设置好了,但我只修改了我的线程中的run()方法,我在logcat中得到了这个错误:
我猜这意味着第76行是问题?
那是: canvas = this.surfaceHolder.lockCanvas();
我在下面的代码段中对此进行了评论:
@Override
public void run()
{
Canvas canvas;
Log.d(TAG, "Starting Game Loop");
while (running) {
canvas = null;
//try locking canvas, so only we can edit pixels on surface
try{
canvas = this.surfaceHolder.lockCanvas(); //LINE 76
synchronized (surfaceHolder){
this.gameView.onDraw(canvas);
}
} finally{
//in case of exception,
//surface is not left in an inconsistent state
if (canvas != null){
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
在此处查看整个GameLoop类代码:http://pastebin.com/kfTy9vzY
你可以在这里看到我的GameView课程:http://pastebin.com/BkmnrUPU
(他们都很短)
我一直试图通过谷歌和自己一般的摆弄几天来解决这个问题,但我一直无法做到,我非常感谢任何人对此事的看法!
答案 0 :(得分:4)
问题在于GameLoop.java中的构造函数。第this.surfaceHolder = surfaceHolder;
行
应为this.surfaceHolder = surfaceholder;
注意原始代码中的大写字母“H”。
如果您正在使用IDE,那么您会在该行上看到诸如“对变量surfaceHolder的赋值无效”的警告。