我正在制作一款游戏应用,需要让玩家保存并恢复其位置。
保存工作正常,存储房间位置,单击“恢复”按钮时检索房间位置不错,但没有将玩家带到保存的房间位置,它只是从头开始游戏。
我认为这可能与此代码有关,但经过8个小时的研究后,我仍然不知道如何改变它: -
Intent value = new Intent(MainMenu.this, MainActivity.class);
startActivity(value);
请帮助,谢谢!
package com.example.gameversion2;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainMenu extends AppCompatActivity {
Button play;
Button resume;
Button exit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
resume = (Button) findViewById(R.id.resume);
resume.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SharedPreferences sp = getSharedPreferences("SAVEPOS", Context.MODE_PRIVATE);
//Load the Editor NOTE: Remember to COMMIT the changes
//Retrieve the Values written to shared preferences
int Value = sp.getInt("save", -1);
Log.w("LOG_TAG", "value: " + Value);
Intent value = new Intent(MainMenu.this, MainActivity.class);
startActivity(value);
}
});
play = (Button) findViewById(R.id.play);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainMenu.this, MainActivity.class);
startActivity(intent);
}
});
exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});//protected void onCreate(Bundle savedInstanceState)
}
}
这是MainActivity
package com.example.gameversion2;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.XmlResourceParser;
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
static final int NO_EXIT = -1;
static final int NUM_OF_ROOMS = 21;
Room[] countries;
Button north;
Button east;
Button south;
Button west;
Button save;
Button exit;
TextView textview;
ImageView flagimg;
int playerPos = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTheCountries();
readXMLFile();
displayRooms();
setupControls();
setupImage();
// startGame();
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
Log.w("TAG", "width = " + width + " height = " + height);
//Toast.makeText(getApplicationContext(), "w = " + width + " height = "+ height, Toast.LENGTH_LONG).show();
textview.setText(countries[playerPos].getDescription());
setupDirectionButtons();
} // protected void onCreate(Bundle savedInstanceState) {
// private void startGame() {
// Variables
//question = S.LoadGame();
//boolean running = true;
// textview.setText("Welcome to Escape The Country!");
// }
private void setupImage() {
ImageView imagePlayer;
ImageView imageRedbull;
imagePlayer = (ImageView)findViewById(R.id.imagePlayer);
imageRedbull = (ImageView)findViewById(R.id.imageRedbull);
imagePlayer.setImageResource(R.drawable.player);
imageRedbull.setImageResource(R.drawable.redbull);
}
public void setupDirectionButtons()
{
// north
if (countries[playerPos].getNorth() == -1 )
{
north.setEnabled(false);
}
else
{
north.setEnabled(true);
}
// east
if (countries[playerPos].getEast() == -1 )
{
east.setEnabled(false);
}
else
{
east.setEnabled(true);
}
// south
if (countries[playerPos].getSouth() == -1 )
{
south.setEnabled(false);
}
else
{
south.setEnabled(true);
}
// west
if (countries[playerPos].getWest() == -1 )
{
west.setEnabled(false);
}
else
{
west.setEnabled(true);
}
} // public void setupDirectionButtons()
public void setupControls()
{
north = (Button)findViewById(R.id.north);
east = (Button)findViewById(R.id.east);
south = (Button)findViewById(R.id.south);
west = (Button)findViewById(R.id.west);
textview = (TextView)findViewById(R.id.textView);
flagimg = (ImageView)findViewById(R.id.flagimg);
save = (Button)findViewById(R.id.saveButton);
save.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
SharedPreferences sp = getSharedPreferences("SAVEPOS", Context.MODE_PRIVATE);
//Load the Editor NOTE: Remember to COMMIT the changes
SharedPreferences.Editor e = sp.edit();
e.putInt("save", playerPos);
e.commit();
//Retrieve the Values written to shared preferences
int Value = sp.getInt("save", -1);
Log.w("LOG_TAG", "value: " + Value);
//imageview.setX(imageview.getX() + 10);
}
});
north.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getNorth();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
east.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getEast();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
south.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getSouth();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
west.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getWest();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
}
public void UpdateImage()
{
switch (playerPos)
{
case 0:
flagimg.setImageResource(R.drawable.canada);
break;
case 1 :
flagimg.setImageResource(R.drawable.norway);
break;
case 2 :
flagimg.setImageResource(R.drawable.sweden);
break;
case 3 :
flagimg.setImageResource(R.drawable.switzerland);
break;
case 4:
flagimg.setImageResource(R.drawable.australia);
break;
case 5 :
flagimg.setImageResource(R.drawable.finland);
break;
case 6 :
flagimg.setImageResource(R.drawable.newzealand);
break;
case 7 :
flagimg.setImageResource(R.drawable.denmark);
break;
case 8:
flagimg.setImageResource(R.drawable.netherland);
break;
case 9 :
flagimg.setImageResource(R.drawable.belgium);
break;
case 10 :
flagimg.setImageResource(R.drawable.ireland);
break;
case 11 :
flagimg.setImageResource(R.drawable.austria);
break;
case 12:
flagimg.setImageResource(R.drawable.uk);
break;
case 13 :
flagimg.setImageResource(R.drawable.italy);
break;
case 14 :
flagimg.setImageResource(R.drawable.germany);
break;
case 15 :
flagimg.setImageResource(R.drawable.japan);
break;
case 16 :
flagimg.setImageResource(R.drawable.spain);
break;
case 17:
flagimg.setImageResource(R.drawable.portugal);
break;
case 18 :
flagimg.setImageResource(R.drawable.france);
break;
case 19 :
flagimg.setImageResource(R.drawable.canada);
break;
case 20 :
flagimg.setImageResource(R.drawable.canada);
break;
}
}
public void initTheCountries() {
countries = new Room[NUM_OF_ROOMS];
for (int pos = 0; pos < NUM_OF_ROOMS; pos++)
{
countries[pos] = new Room();
}
} // public static void initTheCountries()
public void displayRooms() {
Log.w("display ROOM", "**************** start of display rooms ********************************");
for (int pos = 0; pos < NUM_OF_ROOMS; pos++)
{
Log.w("display ROOM", "North = " + countries[pos].getNorth());
Log.w("display ROOM", "East = " + countries[pos].getEast());
Log.w("display ROOM", "West = " + countries[pos].getWest());
Log.w("display ROOM", "South = " + countries[pos].getSouth());
Log.w("display ROOM", "Description = " + countries[pos].getDescription());
}
Log.w("display ROOM", "**************** end of display rooms **********************************");
} // public void displayRooms() {
public void readXMLFile() {
int pos = 0; // May be use this variable, to keep track of what position of the array of Room Objects.
try {
XmlResourceParser xpp = getResources().getXml(R.xml.countries);
xpp.next();
int eventType = xpp.getEventType();
int room_count = 0;
String elemtext = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
String elemName = xpp.getName();
if (elemName.equals("countries")) {
String titleAttr = xpp.getAttributeValue(null,"title");
String authorAttr = xpp.getAttributeValue(null,"author");
} // if (elemName.equals("countries"))
if (elemName.equals("room")) {
room_count = room_count + 1;
}
if (elemName.equals("north")) {
elemtext = "north";
}
if (elemName.equals("east")) {
elemtext = "east";
}
if (elemName.equals("south")) {
elemtext = "south";
}
if (elemName.equals("west")) {
elemtext = "west";
}
if (elemName.equals("description")) {
elemtext = "description";
}
} // if (eventType == XmlPullParser.START_TAG)
// You will need to add code in this section to read each element of the XML file
// And then store the value in the current Room Object.
// NOTE: This method initTheCountries() creates and array of Room Objects, ready to be populated!
// As you can see at the moment the data/text is displayed in the LogCat Window
// Hint: xpp.getText()
else if (eventType == XmlPullParser.TEXT) {
if (elemtext.equals("north")) {
Log.w("ROOM", "north = " + xpp.getText());
countries[room_count-1].setNorth( Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("east")) {
Log.w("ROOM", "east = " + xpp.getText());
countries[room_count-1].setEast(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("south")) {
Log.w("ROOM", "south = " + xpp.getText());
countries[room_count-1].setSouth(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("west")) {
Log.w("ROOM", "west = " + xpp.getText());
countries[room_count-1].setWest(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("description")) {
Log.w("ROOM", "description = " + xpp.getText());
countries[room_count-1].setDescription( xpp.getText() );
}
} // else if (eventType == XmlPullParser.TEXT)
eventType = xpp.next();
} // while (eventType != XmlPullParser.END_DOCUMENT)
} // try
catch (XmlPullParserException e) {
}
catch (IOException e) {
}
exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
} // public void readXMLFile()
} // public class MainActivity extends AppCompatActivity {
答案 0 :(得分:0)
您没有将该值传递给其他活动。
将其设置为这样的意图:
int Value = sp.getInt("save", -1);
Log.w("LOG_TAG", "value: " + Value);
Intent value = new Intent(MainMenu.this, MainActivity.class);
value.putExtra("save", Value);
startActivity(value);
在MainActivity中使用getIntent()获取值.getIntExtra()。
在setContentView()之后将它放在onCreate()方法中:
playerPos = getIntent().getIntExtra("save", 0);
然后用它来设置玩家位置。