簡體   English   中英

如何保存游戲的state

[英]How to save state of game

我試圖讓我的應用程序在關閉或按下后退按鈕時保存。 我想讓它記住選中了哪些框以及得分是多少。

我嘗試查看以前的文章以將復選框 state 保存到共享首選項,但它似乎沒有任何作用。 我已經嘗試了至少 5 種我在這里找到的不同方法,但它要么只是讓應用程序崩潰,要么什么都不做。

這是我得到的代碼:

public class levelOneActivity extends AppCompatActivity {

    TextView scoreTextView;
    Button backButton;
    ConstraintLayout pictureConstraint;
    Button nextLevelButton;
    ListView levelOneListView;
    ArrayAdapter arrayAdapter;
    int score;
    public static final String PREFS_NAME = "MyPrefsFile";
   // SharedPreferences sharedPrefs = context.getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE);



    public void backButton(View view) {
        pictureConstraint.setVisibility(View.INVISIBLE);
    }

    public void nextLevelButton(View view) {
        Log.i("info", "next level!");
        Intent intent = new Intent(getApplicationContext(), levelTwoActivity.class);
        startActivity(intent);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level_one);
        levelOneListView = findViewById(R.id.levelOneListView);
        scoreTextView = findViewById(R.id.scoreTextView);
        pictureConstraint = findViewById(R.id.pictureConstraint);
        backButton = findViewById(R.id.backButton);
        final ImageView imageView2 = findViewById(R.id.imageView2);
        final TextView factTextView = findViewById(R.id.factTextView);
        score = 0;
        final ConstraintLayout levelFinishedConstraint = findViewById(R.id.finishedLevelConstraint);
        nextLevelButton = findViewById(R.id.nextLevelButton);

        final SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.woodlandwanderer", Context.MODE_PRIVATE);


        final String[] levelOneListList = new String[]{
                "Daisy", "Rock", "Tree", "Dandelion", "Grass"
        };

        final int[] imageList = new int[]{
                R.drawable.daisy, R.drawable.rock, R.drawable.tree, R.drawable.dandelion, R.drawable.grass
        };

        final String[] factList = new String[]{
                "Daisies are cool", "Rocks are fun to throw!", "Trees have leaves!", "Dandelions are yellow", "Grass is green"
        };


        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_checked, levelOneListList);


        levelOneListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                pictureConstraint.setVisibility(View.VISIBLE);
                imageView2.setImageResource(imageList[i]);
                factTextView.setText(factList[i]);
                return true;
            }
        });

        levelOneListView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        levelOneListView.setAdapter(arrayAdapter);


        levelOneListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.i("Info", "Clicked");
                CheckedTextView checkedTextView = (CheckedTextView) view;


                if (checkedTextView.isChecked()) {

                    if (score < 9) {
                        score++;
                    } else {
                        score++;
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                levelFinishedConstraint.setVisibility(View.VISIBLE);
                            }

                        }, 1000);
                    }
                } else {
                    Log.i("Info", "Not checked");
                    score = score - 1;
                }

                scoreTextView.setText(Integer.toString(score) + "/10");
            }
        });
    }
}

我建議您提出一個 xml 文件,您可以在其中為選中或未選中的框設置自己的標簽。 每當用戶退出程序或按下后退按鈕時,應用程序關閉之前的最后一件事就是保存當前選中的 state 並替換舊版本。

保存當前 state 的另一種方法是數據庫。 我會對其進行修改,以便甚至可以輸入 xml 樣式,或者您只需將選中框的名稱推送到您的數據庫中。 始終是關閉應用程序之前的最后一步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM