我一直在关注here教程。

到目前为止,我已经设置了一个Gameview和一个Gameloop(一个线程),但是我只是在线程中修改了run()方法,而我在logcat中得到了这个错误:

  • 错误/AndroidRuntime(296):java.lang.NullPointerException
  • 错误/AndroidRuntime(296):位于biz.hireholly.tutorial.GameLoop.run(GameLoop.java:76)

  • 我猜这意味着第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无效”。

    09-04 11:30