2017-03-28 3 views
2

Hoffentlich kann ich dazu einen Rat bekommen.Zurück zur Hauptaktivität in der Android-App mit der Zurück-Taste, um die User-Punktzahl zu sehen

Mein Programm hat einen Sprit, das, wenn Treffer-/geklickt hat, eine Partitur auf dem Bildschirm ausgezählt wird. Wenn das Spiel zu Ende ist (die Zeit abgelaufen ist), möchte ich, dass der Benutzer die Zurück-Taste auf seinem Telefon drücken kann, um zum Hauptbildschirm/Startbildschirm/Aktivität zurückzukehren, wo sie das Spiel begonnen haben, aber es wird auch ihre Punktzahl anzeigen (wie viele Treffer).

Ich kämpfe um herauszufinden, wie es zu bekommen mit der Zurück-Taste drücken, um zurückzukehren. Ich kann das Highscore-Bit zu einem späteren Zeitpunkt herausfinden, wenn es sein muss. Ich möchte nur zu diesem Startbildschirm zurückkehren.

UPDATE:

ich denke, es etwas mit meinem Manifest zu tun hat, warum ist es nicht funktioniert. Ich habe versucht, die 'GameView' Klasse zum Manifest hinzuzufügen, aber sie wird es nicht akzeptieren. Es besagt, dass es keinen Standardkonstruktor hat. Irgendwelche Ideen?

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="cct.mad.lab.MainMenu" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".GameActivity" 
     android:label="@string/app_name" > 
    </activity> 
    <activity 
     android:name=".GameView" 
     android:label="@string/app_name" > 
    </activity> 

Mein GameView Code ist unten:

public class GameView extends SurfaceView implements SurfaceHolder.Callback { 

/* Member (state) fields */ 
private GameLoopThread gameLoopThread; 
private Paint paint; //Reference a paint object 
/** The drawable to use as the background of the animation canvas */ 
private Bitmap mBackgroundImage; 
// For creating the game Sprite 
private Sprite sprite; 
// For recording the number of hits 
private int hitCount; 
// To track if a game is over 
private boolean gameOver; 
// To play sound 
private SoundPlayer sound; 

//int backButtonCount = 0; 

public GameView(Context context) { 
    super(context); 
    // Focus must be on GameView so that events can be handled. 
    this.setFocusable(true); 
    // For intercepting events on the surface. 
    this.getHolder().addCallback(this); 
    // Background image added 
    mBackgroundImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.half_moon); 

    //sound = new SoundPlayer(this); 

} 
/* Called immediately after the surface created */ 
public void surfaceCreated(SurfaceHolder holder) { 
    // We can now safely setup the game start the game loop. 
    ResetGame();//Set up a new game up - could be called by a 'play again option' 
    mBackgroundImage = Bitmap.createScaledBitmap(mBackgroundImage, getWidth(), getHeight(), true); 
    gameLoopThread = new GameLoopThread(this.getHolder(), this); 
    gameLoopThread.running = true; 
    gameLoopThread.start(); 
} 



// For the countdown timer 
private long startTime; // Timer to count down from 
private final long interval = 1 * 1000; // 1 sec interval 
private CountDownTimer countDownTimer; // Reference to the class 
private boolean timerRunning = false; 
private String displayTime; // To display the time on the screen 


//To initialise/reset game 
private void ResetGame(){ 
    /* Set paint details */ 
    paint = new Paint(); 
    paint.setColor(Color.WHITE); 
    paint.setTextSize(20); 
    sprite = new Sprite(this); 
    hitCount = 0; 
    // Set timer 
    startTime = 10; // Start at 10s to count down 
    // Create new object - convert startTime to milliseconds 
    countDownTimer = new MyCountDownTimer(startTime*1000, interval); 
    countDownTimer.start(); // Start the time running 
    timerRunning = true; 
    gameOver = false; 


} 

// Countdown Timer - private class 
private class MyCountDownTimer extends CountDownTimer { 

    public MyCountDownTimer (long startTime, long interval) { 
     super(startTime, interval); 
    } 
    public void onFinish() { 
     //displayTime = "Time is up!"; 
     timerRunning = false; 
     countDownTimer.cancel(); 
     gameOver = true; 
    } 
    public void onTick (long millisUntilFinished) { 
     displayTime = " " + millisUntilFinished/1000; 
    } 
} 


//This class updates and manages the assets prior to drawing - called from the Thread 
public void update(){ 

    sprite.update(); 

} 
/** 
* To draw the game to the screen 
* This is called from Thread, so synchronisation can be done 
*/ 
public void doDraw(Canvas canvas) { 
    //Draw all the objects on the canvas 
    canvas.drawBitmap(mBackgroundImage, 0, 0, null); 

    if (!gameOver) { 
     sprite.draw(canvas); 
     canvas.drawText("Time Remaining: " + displayTime, 35, 50, paint); 
     canvas.drawText("Number of hits: " + hitCount, 250, 50, paint); 
    } else 
     canvas.drawText("Game Over!", 185, 100, paint); 
     canvas.drawText("To go back to the main menu, press the 'back' key", 15, 150, paint); 


} 

//To be used if we need to find where screen was touched 
public boolean onTouchEvent(MotionEvent event) { 
     if (sprite.wasItTouched(event.getX(), event.getY())) { 
      // This just renews the sprite for now 
      sprite = new Sprite(this); 
      //sound.playZapSound(); 
      hitCount++; 

     } 
    return true; 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    gameLoopThread.running = false; 

    // Shut down the game loop thread cleanly. 
    boolean retry = true; 
    while(retry) { 
     try { 
      gameLoopThread.join(); 
      retry = false; 
     } catch (InterruptedException e) {} 
    } 
} 

public void getHitCount() { 



} 

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

} 

} 

Mein MainActivity unten:

public class MainMenu extends Activity { 

private static final int SCORE_REQUEST_CODE = 1;// The request code for the intent 

TextView tvScore; 
String score; 
Intent gameIntent; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_start); 
} 

public void startGame(View v){ 
    gameIntent = new Intent(this,GameActivity.class); 
    startActivityForResult(gameIntent, SCORE_REQUEST_CODE); 
} 
/* Create Options Menu */ 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

// Respond to item selected on OPTIONS MENU 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    //put data in Intent 
    case R.id.easy: 
     Toast.makeText(this, "Easy chosen", Toast.LENGTH_SHORT).show(); 
     return true; 
    case R.id.medium: 
     Toast.makeText(this, "Medium chosen", Toast.LENGTH_SHORT).show(); 
     return true; 
    case R.id.hard: 
     Toast.makeText(this, "Hard chosen", Toast.LENGTH_SHORT).show(); 
     return true; 
    case R.id.other: 
     Toast.makeText(this, "Other chosen", Toast.LENGTH_SHORT).show(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent retIntent) { 
    // Check which request we're responding to 
    if (requestCode == SCORE_REQUEST_CODE) { 
     // Make sure the request was successful 
     if (resultCode == RESULT_OK) { 
      if (retIntent.hasExtra("GAME_SCORE")) { 
       int scoreFromGame = retIntent.getExtras().getInt("GAME_SCORE"); 
       tvScore.setText(Integer.toString(scoreFromGame)); 
      } 
     } 
    } 

} 


} 

Wie immer jede Hilfe sehr dankbar.

Dank

+0

versuchen, die onBackPressed() der Aktivität zu überschreiben und starten Sie die Aktivität mit Hilfe der Absicht, die Ihnen den gewünschten Effekt bieten kann, Kommentar der super.onBackPressed() onBackPressed() –

Antwort

0

Verwendung onBackPressed.

@Override 
public void onBackPressed() { 
    Intent i= new Intent(your_present_activity.this,the_activity_you_want_to_jump_to.class); 
    startActivity(i); 
    finish(); 
} 

Sie Ihre Punktzahl zu Main.class nehmen kann durch newintent.putExtra (Name, "Schlüssel") verwendet wird;

+0

Gibt es irgendwo, insbesondere sollte ich dies setzen da die Überschreibung einen Fehler anzeigt - 'Methode überschreibt die Methode nicht von ihrer Oberklasse' –

+0

Aufruf super.onBackPressed(); entferne @override nicht. – qwerty421

+0

Hinzufügen, dass der Fehler gibt - ‚Die Methode kann nicht lösen‚onBackPressed()‘‘ –

0

Es scheint, dass mein Problem mit der Zurück-Taste funktioniert nicht alles auf meine anderen Aussage in der DoDraw war Methode nicht geschweiften Klammern um die beiden Aussagen haben. Hinzugefügt diese und es funktioniert gut. Die Methode "objectDestroyed" wird automatisch aufgerufen, wenn die Zurück-Taste gedrückt wird, da dies die gameLoopThread-Klasse stoppt. versucht, mir

Vielen Dank für jedermann zu helfen.

Verwandte Themen