2016-04-18 16 views
0

私のアプリで問題が発生しています。私のゲームが終了すると(life == 0)、別のアクティビティを使って画面上のゲームに切り替えようとしています。ゲームが終了すると、アプリは単にクラッシュします。私は、どこからアプリがクラッシュするかを示すだけでなく、私が切り替えようとしている活動のXMLも含めました。もし誰かが手伝ってくれれば、それは素晴らしいだろう!ありがとう。別のアクティビティに切り替えるとAndroidアプリがクラッシュします

activity_game.XML:

enter image description here

SurfaceView私はゲーム終了後から切り替えるしようとしています:

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); 
    } 
} 
を:私はゲーム終了後に到達しようとしています

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

アクティビティ

+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%あなたが間違った名前空間でそれを宣言した時

関連する問題