“新游戏”按钮删除安卓游戏进度

Posted

技术标签:

【中文标题】“新游戏”按钮删除安卓游戏进度【英文标题】:"New Game" button deleting Android game progress 【发布时间】:2017-01-07 06:34:49 【问题描述】:

我开始学习 Java/android Studio 已经一个月了,所以对于任何愚蠢的问题,我提前道歉。

我目前正在使用 Android Studio 制作一个简单的谜语游戏 - 提出一个问题,正确的答案让您进入下一个活动/问题。所以,我的主菜单包含一个开始询问按钮和一个继续按钮。使用 SharedPreferences 我设法让游戏“保存进度”,这样它就可以让你回答你无法回答的最后一个问题;但我的问题来自“开始审讯”按钮。每当按下它并开始一个新游戏时,继续按钮仍会让您回到之前提出的最后一个问题。

所以简单来说,我想让 New Game 按钮删除之前的进度。唯一想到的是在按下按钮时尝试删除 SharedPreferences,但我没有编写这样的代码。

关于我应该怎么做的任何提示?非常感谢您的帮助。这是我的 MainMenu 的 Java 代码。

MainMenuWithLogo.Java

    public class MainMenuWithLogo extends AppCompatActivity 

private Button mStartInterrogationButton;
private VideoView mLogoprwto;
private Button mContinueButton;
MediaPlayer song;


@Override
protected void onPause() 
super.onPause();
song.release();


@Override
public void onResume() 
super.onResume();
setContentView(R.layout.activity_main_menu_with_logo);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
song = MediaPlayer.create(this, R.raw.chopin);
song.start();
song.setLooping(true);




mLogoprwto = (VideoView) findViewById(R.id.logoprwto);
mLogoprwto.setVideoPath("android.resource://its_destination/"+R.raw.teloslogo);
mLogoprwto.start();

mLogoprwto.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 

    @Override
    public void onCompletion(MediaPlayer mp) 

        mLogoprwto.start();
    
);

mStartInterrogationButton = (Button)findViewById(R.id.StartInterrogationButton);
mStartInterrogationButton.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        startGame();

    
);

mContinueButton = (Button)findViewById(R.id.ContinueButton);

mContinueButton.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 

        SharedPreferences prefs = getSharedPreferences("Stage", MODE_PRIVATE);
        boolean question00Answered = prefs.getBoolean("QuestionZero", false);
        boolean question01Answered = prefs.getBoolean("QuestionOne", false);
        boolean question02Answered = prefs.getBoolean("QuestionTwo", false);




        if (!(question00Answered)) 


            Intent intent = new Intent(MainMenuWithLogo.this, QuestionZero.class);

            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            finish();
         else if (!(question01Answered)) 



            Intent intent = new Intent(MainMenuWithLogo.this, QuestionOne.class);
            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            finish();
         else if (!(question02Answered)) 


            Intent intent = new Intent(MainMenuWithLogo.this, QuestionTwo.class);
            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            finish();
        else 


            Intent intent = new Intent(MainMenuWithLogo.this, End.class);
            startActivity(intent);
            overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
            finish();
        

    
);



private void startGame () 
Intent intent = new Intent(this, Intro.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish();

@Override
public void onBackPressed() 
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);


【问题讨论】:

【参考方案1】:

您可以使用SharedPreferences.Editor.remove() 删除使用项目键保存到 SharedPreferences 的项目。所以,当你开始一个新游戏时,调用它来删除用户的进度。或者,如果您想删除 ALL SharedPreferences 中的内容,请致电SharedPreferences.Editor.clear()。

【讨论】:

假设我想从 SharedPreferences 中删除所有内容。就我的 Java 文件而言,我只需要在 mStartInterrogationButton 的 Public Void onClick 下编写 SharedPreferences.Editor.clear() 吗?因为这不起作用——“clear”这个词被加了下划线,并向我显示了一条消息,“非静态方法“clear”()不能从静态上下文中引用”。将这行新代码放在 onResume 下的任何位置后,也会发生同样的事情... @Animated24 是的,Editor 是非静态的,您可以通过在 SharedPreferences 对象上调用 edit() 来获得 Editor 对象。示例:getSharedPreferences("filename", Context.MODE_PRIVATE).edit().clear().apply(); 现在一切都很完美。真是太感谢你了,困扰我很久了! 没问题!很高兴我能帮助你。 SharedPreferences 可能非常不稳定,我刚刚对它们有很多个人经验。本质上,任何时候您需要编辑/删除,都需要通过 Editor 对象来完成。如果您只读取对象,则可以直接从 SharedPreferences 对象执行此操作。

以上是关于“新游戏”按钮删除安卓游戏进度的主要内容,如果未能解决你的问题,请参考以下文章

安卓游戏美少女与坦克

安卓游戏,播放“Game Over”音效

安卓游戏模拟器电脑版怎么设置按键

mac系统上怎么运行安卓模拟器

ons模拟器怎么用

捞月狗app下载|捞月狗app安卓版