1

updateRunning(List<TouchEvent> touchEvents, float deltaTime)我应该如何在里面实现 SharedPreferences GameScreen

SharedPreferences settings = getSharedPreferences("Prefs", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("highscore", var);
editor.commit();

游戏画面.java

package com.m.robotgame;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Paint;

import com.m.framework.Game;
import com.m.framework.Graphics;
import com.m.framework.Image;
import com.m.framework.Input.TouchEvent;
import com.m.framework.Screen;

public class GameScreen extends Screen {

    enum GameState {
        Ready, Running, Paused, GameOver
    }

    GameState state = GameState.Ready;

    private static Robot robot;

    public static int height = 0, highscore;
    public int score;

    private Image currentSprite, character;

    private ArrayList<Tile> tilearray = new ArrayList<Tile>();

    Paint paint;

    public GameScreen(Game game) {
        super(game);
        robot = new Robot();
        character = Assets.character;
        paint = new Paint();
        paint.setTextSize(25);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);

    }

    @Override
    public void update(float deltaTime) {
        List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
        if (state == GameState.Ready)
            updateReady(touchEvents);

        if (state == GameState.Running)
            updateRunning(touchEvents, deltaTime);

        if (state == GameState.Paused)
            updatePaused(touchEvents);

        if (state == GameState.GameOver)
            updateGameOver(touchEvents);
    }

    private void updateReady(List<TouchEvent> touchEvents) {
        if (touchEvents.size() > 0)
            state = GameState.Running;
    }

    private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {

        //Here I would like to have SharedPreferences

        int len = touchEvents.size();

        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_DOWN) {
                if (event.x > 80) {
                    ...
                }
                if (event.x < 20) {
                    ...
                }
            }

            if (event.type == TouchEvent.TOUCH_UP) {
                ...

                if (inBounds(event, 220, 0, 40, 40)) {
                    ...
                }

            }

        }

        if (robot.getCenterY() > 200) {
            ...
        }
    }


    private void updatePaused(List<TouchEvent> touchEvents) {
        ...
    }

    private void updateGameOver(List<TouchEvent> touchEvents) {
        ...
    }

    private void updateTiles() {
        ...
    }

    @Override
    public void paint(float deltaTime) {
        ...
    }

    private void nullify() {
        ...
    }

    private void drawReadyUI() {
        ...
    }

    private void drawRunningUI() {
        ...
    }

    private void drawPausedUI() {
        ...
    }

    private void drawGameOverUI() {
        ...
    }

    @Override
    public void pause() {

        if (state == GameState.Running)
        state = GameState.Paused;
    }

    @Override
    public void resume() {

        if (state == GameState.Paused)
        state = GameState.Running;
    }

    @Override
    public void dispose() {

    }

    private void goToMenu() {
        game.setScreen(new MainMenuScreen(game));
    }

    public static Robot getRobot() {
        return robot;
    }

}

由于我是 Android 和 Java 的初学者,如果您可以编写使其正常工作所需的实际代码,那将非常有帮助,因为“您应该这样做……”之类的评论不幸地对我。谢谢你。

4

3 回答 3

1

您需要将 Context 传递给您的 GameScreen 类..然后定义 pref 如下

SharedPreferences settings = context.getSharedPreferences("Prefs", 0);

更多详情请点击这里

于 2013-09-11T11:22:28.207 回答
0

请参考: Android 中如何使用 SharedPreferences 来存储、获取和编辑值

您唯一应该修改的是“this”对象,在您的情况下,它应该是您传递给 GameScreen 对象的上下文(您应该将上下文传递给 GameScreen 构造函数),然后: mContext.getSharedPreferences(name, mode);

于 2013-09-11T11:22:18.783 回答
0

由于您似乎正在使用 LIBGDX,因此您应该使用Gdx.app.getPreferences()来获取首选项对象。这种用法将使您对自己的偏好更加平台不可知。

http://code.google.com/p/libgdx/wiki/Preferences

于 2013-09-11T11:28:23.710 回答