2016-04-18 32 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%你宣布它有一个错误的命名空间的时间

相关问题