Android GameEntwicklung App strürtz dauerd ab.

  • Antworten:5
  • Bentwortet
Philipp H
  • Forum-Beiträge: 184

25.07.2014, 17:18:13 via Website

Hallo ich habe mich mal an die Game Entwicklung gewagt und habe das Problem das meine App beim Start abstürtzt.
Hier die GameActivity:

package com.example.nimaldev;

import android.app.Activity;
import android.os.Bundle;

public class GameActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new GameView(this));
}

}

Hier der Game View

package com.example.nimaldev;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameView extends SurfaceView {

private SurfaceHolder surfaceHolder;
private Bitmap bmp;
private int y =0;
private GameLoopThread theGameLoopThread;

public GameView(Context context) {
    super(context);
    surfaceHolder = getHolder();
    surfaceHolder.addCallback(new SurfaceHolder.Callback() {

         public void surfaceDestroyed(SurfaceHolder holder) {
                boolean retry = true;
                theGameLoopThread.setRunning(false);
                while(retry){
                    try {
                        theGameLoopThread.join();
                        retry=false;
                    }catch(InterruptedException e){

                    }
                }

            }

            public void surfaceCreated(SurfaceHolder holder) {
                theGameLoopThread.setRunning(true);
                theGameLoopThread.start();
            }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {

        }
    });
    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.DKGRAY);
    if(y <= getHeight() - bmp.getHeight()){
        y=y+3;
    }
    canvas.drawBitmap(bmp, 25, y, null);
}

}

und hier der GameLoopThread:

package com.example.nimaldev;

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

public class GameLoopThread extends Thread {
private GameView theView;
private boolean isRunning = false;

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

public void setRunning(boolean run) {
    isRunning = run;
}
@SuppressLint("WrongCall") 
@Override
public void run() {
    while (isRunning) {
        Canvas theCanvas = null;
        try {
            theCanvas = theView.getHolder().lockCanvas();
            synchronized (theView.getHolder()) {
                theView.onDraw(theCanvas);
            }
        } finally {
            if (theCanvas != null) {
                theView.getHolder().unlockCanvasAndPost(theCanvas);
            }
        }
    }
}

}

und hier der LogCat:

07-25 17:13:30.626: E/AndroidRuntime(24986): FATAL EXCEPTION: main

07-25 17:13:30.626: E/AndroidRuntime(24986): Process: com.example.nimaldev, PID: 24986
07-25 17:13:30.626: E/AndroidRuntime(24986): java.lang.NullPointerException
07-25 17:13:30.626: E/AndroidRuntime(24986): at com.example.nimaldev.GameView$1.surfaceCreated(GameView.java:38)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.SurfaceView.updateWindow(SurfaceView.java:601)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.SurfaceView.access$000(SurfaceView.java:94)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:183)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:879)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2129)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1234)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6465)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.Choreographer.doCallbacks(Choreographer.java:603)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.Choreographer.doFrame(Choreographer.java:573)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.os.Handler.handleCallback(Handler.java:733)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.os.Handler.dispatchMessage(Handler.java:95)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.os.Looper.loop(Looper.java:157)
07-25 17:13:30.626: E/AndroidRuntime(24986): at android.app.ActivityThread.main(ActivityThread.java:5356)
07-25 17:13:30.626: E/AndroidRuntime(24986): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 17:13:30.626: E/AndroidRuntime(24986): at java.lang.reflect.Method.invoke(Method.java:515)
07-25 17:13:30.626: E/AndroidRuntime(24986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
07-25 17:13:30.626: E/AndroidRuntime(24986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
07-25 17:13:30.626: E/AndroidRuntime(24986): at dalvik.system.NativeStart.main(Native Method)
07-25 17:13:32.668: I/Process(24986): Sending signal. PID: 24986 SIG: 9

— geändert am 25.07.2014, 17:18:47

Ein Fehler ist kein Fehler es ist ein Feature///https://play.google.com/store/apps/developer?id=Nimal+Development

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.640

25.07.2014, 17:21:39 via App

Der Fehler liegt in der Zeile 38

E/AndroidRuntime(24986): at com.example.nimaldev.GameView$1.surfaceCreated(GameView.java:38)

— geändert am 25.07.2014, 17:22:07

Ich sammle gerne Namen in meinem Death Note.

Samsung Galaxy Note 2<3 -> Samsung Galaxy Note 3 <3

Antworten
Philipp H
  • Forum-Beiträge: 184

25.07.2014, 17:28:23 via Website

Ja das weiß ich auch nur hab ich das Problem das ich nichgt weiß wie ich das behebe weil in dem Video von Panjutorials funktioniert es perfekt

Ein Fehler ist kein Fehler es ist ein Feature///https://play.google.com/store/apps/developer?id=Nimal+Development

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.07.2014, 20:11:36 via Website

Wir hatten hier schon mal einen Thread zu einem Panjutatutorial, bei dem der Code so ähnlich aussah.
irgendwann hat sich herausgestellt, dass der Code im Tut gar nicht Funktioniert (war bei einem Spiel so und dann konnte man das Tut vergessen)
Ob es bei dir das gleiche ist, weiss ich nicht.
Hier mal der Link zum Thread:
https://www.nextpit.de/forum/593183/app-startet-nicht-mehr-fatal-exception

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Georg C.
  • Forum-Beiträge: 235

25.07.2014, 21:16:54 via Website

Ob es bei dir das gleiche ist, weiss ich nicht.

Hallo,
der Schreibt selber, dass es sich um den Panjutorials Tut handelt.
Ich habe wirklich sehr wenig Zeit. Hier gucke zwar relativ oft!,
- aus Neugier, ... um was zu lernen ...

@Philipp H
meine Letzte Version sollte (was das Spiel Betrifft) eigentlich "sauber" sein.
Einziges Problem ist das Menu!
Die Buttons werden auf einem Dialog Obj. gezeichnet.
In dem "manuell übernommenem" Status- Steuerung der Activity (Pause, ... Resume)
- also quasi dem Game- Menu befindet sich ein Logisches Fehler.
Den "rauszubekommen" ist einfach -> zeitraubend! :D
Den ganzen Ablaufsprozess, habe ich sogar "dokumentiert". Rest ist NUR! einfaches Logisches Denken. Die zusammenhänge also herausfiltern und dementsprechend den Code zu ändern.

LG
Georg

Nachtrag
oder (was ich auch selber machen würde) eigentlich die schon vorhandene MenuActivity Klasse dafür anzupassen, und sich vom Dialog "zu trennen".

— geändert am 25.07.2014, 21:23:24

Sorry für Gramatik & Stilistik Fehler.

Antworten