2016-04-29 4 views
1

私はJava Androidプログラミングの初心者です。私はEclipseを使用して基本的なアンドロイドゲームを作成しています。ハイスコアを保存します。私は共有された環境設定を使用するように言われているので、ゲームを終了してもう一度開くと、ハイスコアが保存されます。私はすでに「メインメニュー」ページに保存するためにハイスコアを取得していますが、共有プリファレンスコードをどこに置くのか非常に混乱していますか?それは私のOnCreateにあるべきですか?私のコードを見て、私を助けてください。私はおそらくかなりシンプルだと知っていますが、私はしばらくの間これをやっています。 BELOWJava Androidの基本ゲーム - 共有設定を使用してHighScoreを保存する - 合計開始日

CODE:あなたは完全に活動のライフサイクルを理解していない場合

package cct.mad.lab; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.graphics.Bitmap; 
import android.graphics.drawable.BitmapDrawable; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import cct.mad.lab.GameView; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.SoundPool; 
import android.net.Uri; 

public class MainMenu extends Activity { 

    //MediaPlayer backgroundmusic;//////////////////// 

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

    private static final int PREFERENCE_MODE_PRIVATE = 0; 

    TextView tvHighScore; 
    TextView tvLastScore; 
    //TextView tvScore 
    String score; 
    Intent gameIntent; 
    int HighNum = 0; 
    SoundPool sp; 
    MediaPlayer mp; 
    int hit = 0; 
    ImageView crash; 
    ImageView image; 
    //int highscore = 0; 



    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.game_start); 
     tvHighScore = (TextView) findViewById(R.id.tvGuessGame); 
     tvLastScore = (TextView) findViewById(R.id.LastGameNumb); 


    } 

    public void startGame(View v) 

    { 
     gameIntent = new Intent(this,GameActivity.class); 
     startActivityForResult(gameIntent, SCORE_REQUEST_CODE); 

     mp = MediaPlayer.create(this, R.raw.bgmusic); // Assigns the media player to the bgmusic in the raw flder 
     mp.setLooping(true); // loops the media player so it continues to play 
     mp.start(); // starts the media player when the start game button is called 
    } 


    /* 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) { 

    mp.pause(); // Pauses the Mediaplayer when the game is stopped and returned to the main menu. 

     // 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"); 

        if (scoreFromGame > HighNum) 
        { 
        tvHighScore.setText(Integer.toString(scoreFromGame)); 
        tvLastScore.setText(Integer.toString(scoreFromGame)); 
        HighNum = scoreFromGame; 
        } 

        else if (scoreFromGame > HighNum) 
        { 
         tvHighScore.setText(Integer.toString(scoreFromGame)); 
         tvLastScore.setText(Integer.toString(scoreFromGame)); 
        } 

        else if (scoreFromGame < HighNum) 
        { 
         tvLastScore.setText(Integer.toString(scoreFromGame)); 
        } 
       } 
      } 
     } 

    } 


    @Override 
    protected void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
     mp.stop(); // Stops the mediaplayer when the game/emulator is exited. 
     mp.release(); // Stops the mediaplayer when the game/emulator is exited. 
    } 







    /* 
    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState){ // When activity stops, system calls onSaveInstancState to save info. 
     //Save the user's current game state 
     savedInstanceState.putInt("GAME_SCORE", HighNum); 
     super.onSaveInstanceState(savedInstanceState); //Calls superclass to view the hierachy state 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); // Calls the superclass first 

     if (savedInstanceState != null) { 
      HighNum = savedInstanceState.getInt("GAME_SCORE"); 
     } else { 



     } 

     super.onRestoreInstanceState(savedInstanceState); 
    } 



    */ 




} 
+0

getSharedPreferencesメソッドはonCreate()の後になければなりません。私はonResume()は大丈夫だと思います。共有プリファレンスは、アプリが破棄されるまでキーペアのみを保存します。あなたはonResumeで共有された設定を取得し、それを使ってエディタを作成することができます。次に、ハイスコアが作成されるたびに、書き込みとコミットを行います。 OnResume()でそれらを呼び出すと、再度ハイスコアが設定されます。しかし、アプリが破棄された場合、これもまた失われます。おそらくSQLiteを使用しますか? –

+0

よろしくお願いします!とにかく、上記のコードに基づいて、どのように共有環境設定を設定して取得するかの例を私に与えることができますか? onPauseを作成して共有設定を設定する場合SharedPreferences prefs = this.getSharedPreferences( "myPrefsKey"、Context.MODE_PRIVATE); エディタエディタ= prefs.edit(); editor.putInt( "key"、score); editor.commit();私のゲームから得点を得るために私は何を変えるだろうか?現在、上記のコードのtvhighscoreテキストビューに保存されています。 – NewChaz

+0

ハイスコアはtextViewに入れますが、実際のスコアはscoreFromGameにあり、HighNumより大きい場合に設定されます。 HighNumをチェックするときは、prefsも設定する必要があります。上記のコメントにあるコードをすべて関数に入れ、if(scoreFromGame> HigNum)が真の部分を渡してscoreFromGameを渡します。上記のコードに基づいて、どのように設定して共有の環境設定を取得するかの例を教えてもらえますか?onPauseを作成して共有の環境設定を設定した場合は、editor.setInt( "hightScore"、scoreFromGame –

答えて

2

あなたはAndroid Activity lifecycleになっているはずです。イメージには、自分のアクティビティが入る可能性のある状態と、これらを切り替えるために呼び出す関数が示されています。

enter image description here

あなたのアクティビティクラスのonResume機能で好みをonPauseに設定を保存し、ロードすることができるはずです。つまり、アクティビティを閉じる/開くたびに、あなたの設定が保存/ロードされます。

+0

OK! ( "key"、score); editor.commit();私は何を取得するために変更するだろうか?私のゲームの得点?これは現在、上記のコードのtvhighscoreテキストビューに保存されています – NewChaz

+0

同じ方法で設定オブジェクトを取得すると、次のようになります: prefs.getInt(KeyString、DefaultValue) http://developer.android.com/reference/android/content/SharedPreferences.html – dahui