Java 如何实现SharedReferences?

Java 如何实现SharedReferences?,java,android,Java,Android,如何在GameScreen中的updateRunning(列出touchEvents,float deltaTime)中实现SharedReference SharedPreferences settings = getSharedPreferences("Prefs", 0); SharedPreferences.Editor editor = settings.edit(); editor.putInt("highscore", var); editor.commit(); GameScr

如何在
GameScreen
中的
updateRunning(列出touchEvents,float deltaTime)
中实现SharedReference

SharedPreferences settings = getSharedPreferences("Prefs", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("highscore", var);
editor.commit();
GameScreen.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;
    }

}
package com.m.robotgame;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
导入android.app.Activity;
导入android.content.SharedReferences;
导入android.graphics.Color;
导入android.graphics.Paint;
导入com.m.framework.Game;
导入com.m.framework.Graphics;
导入com.m.framework.Image;
导入com.m.framework.Input.TouchEvent;
导入com.m.framework.Screen;
公共类游戏屏幕扩展屏幕{
枚举配子状态{
准备、运行、暂停、游戏结束
}
GameState=GameState.Ready;
私人静态机器人;
公共静态整数高度=0,高分;
公众智力得分;
私人形象、精灵、人物;
private ArrayList tilerray=new ArrayList();
油漆;
公共游戏屏幕(游戏){
超级(游戏);
机器人=新机器人();
character=Assets.character;
油漆=新油漆();
油漆.尺寸(25);
paint.setTextAlign(paint.Align.CENTER);
paint.setAntiAlias(真);
油漆。设置颜色(颜色。白色);
}
@凌驾
公共无效更新(浮动增量时间){
List touchEvents=game.getInput().getTouchEvents();
if(state==GameState.Ready)
更新日期(touchEvents);
if(state==GameState.Running)
更新规划(touchEvents,deltaTime);
如果(状态==游戏状态。暂停)
UpdatePause(触摸事件);
if(state==GameState.GameOver)
updateGameOver(触摸事件);
}
私有void updaterady(列出touchEvents){
如果(touchEvents.size()>0)
状态=游戏状态。正在运行;
}
私有无效更新规划(列出touchEvents、float deltaTime){
//在这里,我想分享一些参考资料
int len=touchEvents.size();
对于(int i=0;i80){
...
}
如果(事件x<20){
...
}
}
if(event.type==TouchEvent.TOUCH\u UP){
...
if(边界内(事件,220,0,40,40)){
...
}
}
}
如果(robot.getCenterY()>200){
...
}
}
私有void updatePause(列出touchEvents){
...
}
私有void updateGameOver(列出touchEvents){
...
}
私有void updateiles(){
...
}
@凌驾
公共空隙涂料(浮动三角洲){
...
}
私有无效无效(){
...
}
私有无效drawReadyUI(){
...
}
私有void drawRunningUI(){
...
}
私人空间{
...
}
私有void drawGameOverUI(){
...
}
@凌驾
公共空间暂停(){
if(state==GameState.Running)
状态=游戏状态。暂停;
}
@凌驾
公众简历(){
如果(状态==游戏状态。暂停)
状态=游戏状态。正在运行;
}
@凌驾
公共空间处置(){
}
私有void goToMenu(){
设置屏幕(新主菜单屏幕(游戏));
}
公共静态机器人getRobot(){
返回机器人;
}
}
由于我是Android和Java的初学者,如果你能编写实际的代码,这将非常有帮助,因为像“你应该这样做…”这样的评论对我来说意义不大。谢谢。

请参阅:

您唯一应该修改的是“this”对象,在您的情况下,它应该是您传递给GameScreen对象的上下文(您应该将上下文传递给GameScreen构造函数),然后: GetSharedReferences(名称、模式)

请参考:

您唯一应该修改的是“this”对象,在您的情况下,它应该是您传递给GameScreen对象的上下文(您应该将上下文传递给GameScreen构造函数),然后:
GetSharedReferences(名称、模式)

您需要将上下文传递给您的GameScreen类..然后定义pref,如下所示

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

有关更多详细信息,您需要将上下文传递给GameScreen类。然后按如下所示定义pref

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

有关详细信息

由于您似乎正在使用LIBGDX,因此应使用
Gdx.app.getPreferences()
获取preferences对象。这种用法将允许您对自己的首选项更加不依赖于平台


因为您似乎在使用LIBGDX,所以应该使用
Gdx.app.getPreferences()
来获取preferences对象。这种用法将允许您对自己的首选项更加不依赖于平台


在应用程序类中编写SharedReference代码。在updateRunning方法中调用该方法。您应该在应用程序类中使SP对象成为全局对象。在应用程序类中编写SharedReference代码。在updateRunning方法中调用该方法。您应该在应用程序类中使SP对象成为全局对象。要将上下文传递给GameScreen类,是吗?在另一个类中,我有Context=this;,但是当我尝试将它与SharedReferences设置一起使用时=OtherClass.context.GetSharedReferences(“Prefs”,0);,我收到错误“无法从静态上下文引用非静态字段“上下文”。这是因为上下文不是静态的。如果我将其设置为静态,则会出现错误“'com..OtherClass.无法从静态上下文中引用此”“。请将上下文参数添加到GameScreen构造函数中,如-->公共GameScreen(游戏,上下文上下文上下文);并从调用GameScreen的位置传递上下文值…是否要将上下文传递给GameScreen类?在另一节课上,我有上下文