2016-04-18 9 views
0

Ich stoße auf ein Problem in meiner App. Wenn mein Spiel endet (wenn life == 0), versuche ich über eine andere Aktivität zu einem Spiel über den Bildschirm zu wechseln. Wenn das Spiel endet, stürzt die App einfach ab. Ich habe den XML-Code für die Aktivität, von der ich versuche zu wechseln, sowie den Absturz der App angegeben. Wenn jemand helfen könnte, wäre das großartig! Vielen Dank.Android App stürzt beim Versuch ab, zu einer anderen Aktivität zu wechseln

activity_game.XML:

enter image description here

SurfaceView ich einmal Spiel zu wechseln versuchen endet:

public class SVGameView extends SurfaceView implements Runnable { 
     private SurfaceHolder holder; 
    Thread thread = null; 
    volatile boolean running = false; 
    static final long FPS = 30; 
    private Sprite sprite; 
    private long lastClick; 

    private Bitmap ball, gameOver; 
    //private int x = 200, y = 200; 
    private int scorePosX = 100; 
    private int scorePosY = 100; 
    private int countScore = 0; 
    private int life = 1; 

    public SVGameView(Context context) { 
     super(context); 
     thread = new Thread(this); 
     holder = getHolder(); 
     holder.addCallback(new SurfaceHolder.Callback() { 

      @Override 
      public void surfaceDestroyed(SurfaceHolder holder) { 
       boolean retry = true; 
       running = false; 
       while (retry) { 
        try { 
         thread.join(); 
         retry = false; 
        } catch (InterruptedException e) { 
        } 
       } 
      } 

      @Override 
      public void surfaceCreated(SurfaceHolder holder) { 
       running = true; 
       thread.start(); 
      } 

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

     ball = BitmapFactory.decodeResource(getResources(), R.drawable.ball2); 
     gameOver = BitmapFactory.decodeResource(getResources(),R.drawable.endscreen); 
     sprite = new Sprite(this, ball); 
    } 

    @Override 
    public void run() { 
     long ticksPS = 1000/FPS; 
     long startTime; 
     long sleepTime; 

     while (running) { 
      Canvas c = null; 
      startTime = System.currentTimeMillis(); 
      try { 
       c = getHolder().lockCanvas(); 
       synchronized (getHolder()) { 
        update(); 
        draw(c); 
       } 
      } finally { 
       if (c != null) { 
        getHolder().unlockCanvasAndPost(c); 
       } 
      } 
      sleepTime = ticksPS-(System.currentTimeMillis() - startTime); 
      try { 
       if (sleepTime > 0) 
        thread.sleep(sleepTime); 
       else 
        thread.sleep(10); 
      } catch (Exception e) {} 

     } 
    } 

    private void update(){ 
     sprite.update(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.WHITE); 
     Paint paint = new Paint(); 
     canvas.drawPaint(paint); 
     paint.setColor(Color.WHITE); 
     paint.setTextSize(48); 
     canvas.drawText("Score: " + countScore, scorePosX, scorePosY, paint); 
     canvas.drawText("Lives: " + life, 500, 100, paint); 
     sprite.onDraw(canvas); 

     //Crashes here 
     if(life == 0) { 
      getContext().startActivity(new Intent(getContext(), SVGameOver.class)); 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     if(System.currentTimeMillis()-lastClick > 300){ 
      lastClick = System.currentTimeMillis(); 
     } 

     synchronized (getHolder()){ 
      if(sprite.isHit(event.getX(), event.getY())){ 
       countScore += 1; 
       sprite.increase(); 
      }else{ 
       life --; 
      } 
     } 
     return super.onTouchEvent(event); 
    } 
} 

Aktivität ich einmal das Spiel zu erreichen versuchen endet:

public class SVGameOver extends Activity { 

    private Bitmap gameOverScreen; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 

     gameOverScreen = BitmapFactory.decodeResource(getResources(), R.drawable.endscreen); 
    } 

    protected void onDraw(Canvas canvas){ 
     canvas.drawBitmap(gameOverScreen, 0,0,null); 
    } 
} 
+0

Können Sie Ihren Logcat des Absturzes aktualisieren? –

+0

@RohitSharma Ich benutze Android Studio. Ich habe angegeben, wo der Absturz auftritt. – user3353568

+0

Können Sie bitte sagen, welche Ausnahme den Absturz verursacht? –

Antwort

0

Deklarieren Sie SVGameOver Aktivität in Ihrem AndroidManifest.xml:

<activity 
    android:name="com.example.welcome.assignment2.SVGameOver"> 
    ... 
</activity> 
1

Ich denke logcat Sie die richtige Frage stellt: „erklärt haben Sie diese Aktivität in AndroidManifest.xml“?

Wenn Sie denken, dass Sie es getan haben, ist es sehr wahrscheinlich, dass Sie es falsch gemacht haben, meistens denken Sie, Sie hätten dem Manifest eine Aktivität hinzugefügt, aber Sie erhalten diese Art von Absturz, 99,9% die Zeit, die Sie es mit einem falschen Namespace deklarierten

Verwandte Themen