我一直在关注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
Andd,您可以在这里看到我的GameView类:http://pastebin.com/BkmnrUPU
(它们都很短)
几天来我一直在尝试自己与Google交流,但总的来说还是有点麻烦,但我也一直无法做到,我非常感谢任何人对此事的想法!
最佳答案
问题出在GameLoop.java中。行this.surfaceHolder = surfaceHolder;
应为this.surfaceHolder = surfaceholder;
。请注意原始代码中的大写字母“H”。
如果使用的是IDE,则会在该行上看到警告,例如“分配给变量surfaceHolder无效”。