0

我刚刚完成了一个小游戏,第二个,基于 java4edu 完成的代码: http ://www.edu4java.com/en/game/game0-en.html

但是,在我的模组之后,我遇到了一个小故障,每当我恢复,旋转屏幕,将屏幕更改为(从画廊加载)或任何将画布发送到背景的东西时;onresume,我收到一个错误,其中 logcat 总是指向这个:canvas.drawBitmap(bka, 0, 0, null);

我认为虽然更重要的是我需要在适当的时候停止我的游戏循环线程,以便它刷新并重新加载绘制值,但是 idk,请建议!!?

package com.doggy.__elite;


import android.annotation.SuppressLint;
import android.graphics.Canvas;

public class GameLoopThread extends Thread {
       static final long FPS = 100;
       private GameView view;
       private boolean running = false;

       public GameLoopThread(GameView view) {
             this.view = view;
       }

       public void setRunning(boolean run) {
             running = run;
       }

       @SuppressLint("WrongCall")
    @Override
       public void run() {

             while (running) {
                    Canvas c = null;

                    try {
                           c = view.getHolder().lockCanvas();
                           synchronized (view.getHolder()) {
                                  view.onDraw(c);
                           }
                    } finally {
                           if (c != null) {
                                  view.getHolder().unlockCanvasAndPost(c);
                           }
                    }



             }
       }

}

第 141 行是: bka = Bitmap.createScaledBitmap(bka, Dwidtha, Dheighta, true); --or-- canvas.drawBitmap(bka, 0, 0, null); 我发现了暂停问题,我只需要添加: public void onPause(Bundle savedInstanceState) { super.onPause(); } :)

这是恢复时发生的情况:

11-24 12:16:12.538:E/AndroidRuntime(20772):致命异常:主要 11-24 12:16:12.538:E/AndroidRuntime(20772):java.lang.NullPointerException 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 com.doggy.__elite.GameView$1.surfaceCreated(GameView.java:66) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.SurfaceView.updateWindow( SurfaceView.java:545) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:226) 11-24 12:16:12.538: E/AndroidRuntime( 20772): 在 android.view.View.dispatchWindowVisibilityChanged(View.java:5851) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:951) 11 -24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:951) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:951) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1038) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2583) 11-24 12: 16:12.538: E/AndroidRuntime(20772): 在 android.os.Handler.dispatchMessage(Handler.java:99) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.os.Looper.loop (Looper.java:137) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 android.app.ActivityThread.main(ActivityThread.java:4508) 11-24 12:16:12.538: E/AndroidRuntime (20772): 在 java.lang.reflect.Method.invokeNative(Native Method) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 java.lang.reflect.Method。调用(Method.java:511)11-24 12:16:12.538:E/AndroidRuntime(20772):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)11-24 12: 16:12.538: E/AndroidRuntime(20772): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 11-24 12:16:12.538: E/AndroidRuntime(20772): 在 dalvik.system .NativeStart.main(本机方法)

第 66 行是:gameLoopThread.setRunning(true);

4

0 回答 0