高分数据持久化?
High score data persistence?
我正在努力为我的游戏保存高分。我有一个主屏幕 activity、一个游戏屏幕 activity 和一个重定向屏幕 activity(当玩家输球时)。这是游戏屏幕 activity 中的一个方法,它会在玩家死亡时运行:
public void goToRedirectScreen()
{
//getting preferences
SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
int highScore = prefs.getInt("highScore", 0); //0 is the default value
rectBlack1.setFixedColor(0xFFFF0015);
rectBlack2.setFixedColor(0xFFFF0015);
rectBlack3.setFixedColor(0xFFFF0015);
rectWhite1.setFixedColor(0xFFFF0015);
rectWhite2.setFixedColor(0xFFFF0015);
rectWhite3.setFixedColor(0xFFFF0015);
//Sound when player dies
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.deathsound);
mediaPlayer.start();
Intent intent = new Intent(this, Redirect.class);
if (mScoreboard.getScore() > highScore){
mScoreboard.setHighScore(mScoreboard.getScore());
}
intent.putExtra("score", mScoreboard.getScore() + "");
intent.putExtra("highScore", mScoreboard.getHighScore() + "");
startActivity(intent);
}
这里是我接收意图的重定向屏幕的一些代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_redirect);
Intent intent = getIntent();
mScore = intent.getStringExtra("score");
mHighScore = intent.getStringExtra("highScore");
//**********setting preferences************
SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("highScore", Integer.parseInt(mHighScore));
editor.commit();
ButterKnife.inject(this);
scoreTextView.setText(mScore);
highScoreTextView.setText(mHighScore);
playAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playAgain();
}
});
mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goToMainMenu();
}
});
}
为了做到这一点,我参考了 Need to save a high score for an Android game 来做到这一点,但现在我不知道我做错了什么,因为无论我在测试游戏时得到什么分数,highscore 和 score textview 总是相同的即使比我之前的分数高。
这是我的记分板class,如果有用的话:
public class Scoreboard {
private int mScore = 0;
private int mHighScore = 0;
public void addPoint() {
mScore += 1;
}
public int getHighScore() {
return mHighScore;
}
public void setHighScore(int highScore) {
mHighScore = highScore;
}
public int getScore() {
return mScore;
}
public void setScore(int score) {
mScore = score;
}
}
加载后将加载的值设置为最高分:
int highScore = prefs.getInt("highScore", 0); //0 is the default value
mScoreboard.setHighScore(highScore);
否则,在新分数不是新高分的情况下,您实际上并没有使用加载的值,因此现有高分不会传递到您的重定向屏幕。
我正在努力为我的游戏保存高分。我有一个主屏幕 activity、一个游戏屏幕 activity 和一个重定向屏幕 activity(当玩家输球时)。这是游戏屏幕 activity 中的一个方法,它会在玩家死亡时运行:
public void goToRedirectScreen()
{
//getting preferences
SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
int highScore = prefs.getInt("highScore", 0); //0 is the default value
rectBlack1.setFixedColor(0xFFFF0015);
rectBlack2.setFixedColor(0xFFFF0015);
rectBlack3.setFixedColor(0xFFFF0015);
rectWhite1.setFixedColor(0xFFFF0015);
rectWhite2.setFixedColor(0xFFFF0015);
rectWhite3.setFixedColor(0xFFFF0015);
//Sound when player dies
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.deathsound);
mediaPlayer.start();
Intent intent = new Intent(this, Redirect.class);
if (mScoreboard.getScore() > highScore){
mScoreboard.setHighScore(mScoreboard.getScore());
}
intent.putExtra("score", mScoreboard.getScore() + "");
intent.putExtra("highScore", mScoreboard.getHighScore() + "");
startActivity(intent);
}
这里是我接收意图的重定向屏幕的一些代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_redirect);
Intent intent = getIntent();
mScore = intent.getStringExtra("score");
mHighScore = intent.getStringExtra("highScore");
//**********setting preferences************
SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", this.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("highScore", Integer.parseInt(mHighScore));
editor.commit();
ButterKnife.inject(this);
scoreTextView.setText(mScore);
highScoreTextView.setText(mHighScore);
playAgainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playAgain();
}
});
mainMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goToMainMenu();
}
});
}
为了做到这一点,我参考了 Need to save a high score for an Android game 来做到这一点,但现在我不知道我做错了什么,因为无论我在测试游戏时得到什么分数,highscore 和 score textview 总是相同的即使比我之前的分数高。
这是我的记分板class,如果有用的话:
public class Scoreboard {
private int mScore = 0;
private int mHighScore = 0;
public void addPoint() {
mScore += 1;
}
public int getHighScore() {
return mHighScore;
}
public void setHighScore(int highScore) {
mHighScore = highScore;
}
public int getScore() {
return mScore;
}
public void setScore(int score) {
mScore = score;
}
}
加载后将加载的值设置为最高分:
int highScore = prefs.getInt("highScore", 0); //0 is the default value
mScoreboard.setHighScore(highScore);
否则,在新分数不是新高分的情况下,您实际上并没有使用加载的值,因此现有高分不会传递到您的重定向屏幕。