2016-04-18 179 views
0

我在我的應用中遇到問題。當我的遊戲結束時(life == 0)我試圖通過使用不同的活動切換到屏幕上的遊戲。遊戲結束後,應用程序崩潰。我已經將XML添加到了我想要從中切換的活動以及指出應用程序崩潰的位置。如果任何人都可以幫忙,那會很棒!謝謝。嘗試切換到另一個活動時,Android應用崩潰

activity_game.XML:

enter image description here

SurfaceView我試圖從一次遊戲結束切換:

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); 
    } 
} 

活動我試圖達到一旦遊戲結束:

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

你可以更新你的崩潰logcat嗎? –

+0

@RohitSharma我正在使用Android Studio。我已經指出了發生撞車的地方。 – user3353568

+0

你能告訴我們什麼異常導致崩潰? –

回答

0

聲明SVGameOver活動在你的AndroidManifest.xml:

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

我想logcat會問你一個正確的問題:「你是否在你的AndroidManifest.xml中聲明瞭這個活動?」?

如果你覺得你做到了,這是極有可能你在一個錯誤的方式做到了,大多數你認爲你添加一個活動到清單的時間,但您收到這樣的崩潰中,99.9%你宣佈它有一個錯誤的命名空間的時間

相關問題