У меня вопрос по поводу автоматического сохранения и загрузки игры. В этом примере, подобно Temple Run, он автоматически сохраняет игру на всем (записи, полученные деньги и разблокированные вкусности), как бы просто это ни казалось. По сравнению с игрой для PlayStation 1, скажем, Abe's Exodus, в ней нет функции автоматического сохранения/загрузки, но она может сохранять игру в точном местоположении области внутри уровня игру, где ушел Эйб, и когда вы загружаете игру, она автоматически запускает игру на последней локации, оставшейся на этом уровне.
Теперь я пытаюсь протестировать эту функцию автоматической загрузки и сохранения игры с помощью этого простого приложения, которое я сделал, вот последовательность, в которой я ожидаю успеха:
- Откройте приложение в первый раз, и если это новое приложение, подвижный спрайт по умолчанию будет начинаться в центре.
- Далее я попытался переместить спрайт, наклонив устройство и поместив его не сверху.
- Затем, когда я закрываю приложение, используя клавишу BACK, а не клавишу HOME, чтобы закрыть приложение путем утилизации.
- Наконец, когда я снова открываю приложение, всякий раз, когда эта координата, которую я поместил на спрайт, будет новой отправной точкой.
В моей программе есть ошибки. Вместо спрайта сверху, и это место должно сохранять эту координату, спрайт возвращается в центр, когда я снова открываю! Я попробовал ключевое слово Preferences в методе render() непосредственно в рабочей области кода, чтобы проверить возможность сохранения игры, но сбивает с толку, поскольку кажется, что он только считывает значение.
Вот мои несколько вопросов по этой теме выше:
- Стоит ли использовать SQL Lite для Java в LibGDX для сохранения игры?
- Android-смартфоны, такие как Samsung Galaxy SIII, имеют слот для SD-карты, но не в Google Nexus Tablet, и основная проблема заключается в следующем: действительно ли в планшетах Android есть внешний диск? ? Могу ли я сохранить игру во внутреннюю память вместо того, чтобы закодировать ее?
- Является ли использование настроек единственным способом автоматически сохранить все (то есть персонажей, записи, предметы, настройки, уровни и т. д.) и автоматически загрузить все, только если после закрытия приложения и его повторного открытия?
Надеюсь, вы можете мне помочь.
Вот мой код:
Сохранить_Загрузить_Test.java
package com.test.save_and_load_test;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Preferences;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.GdxRuntimeException;
public class Save_and_Load_Test implements Screen
{
private OrthographicCamera camera;
private Texture texture;
private Texture background;
private SpriteBatch batch;
private Rectangle pos;
private Rectangle BG_pos;
private float w = 720;
private float h = 1280;
Start game;
public Save_and_Load_Test(Start game)
{
this.game = game;
}
@Override
public void render(float delta)
{
// TODO render()
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(background, BG_pos.x, BG_pos.y);
batch.draw(texture, pos.x, pos.y);
batch.end();
if(Gdx.input.getAccelerometerX() >= 1 && pos.x >= 0)
{
pos.x -= 20;
}
if(Gdx.input.getAccelerometerX() <= -1 && pos.x <= (720 - pos.width))
{
pos.x += 20;
}
if(Gdx.input.getAccelerometerY() >= 1 && pos.y >=0)
{
pos.y -= 20;
}
if(Gdx.input.getAccelerometerY() <= -1 && pos.y <= (1280 - pos.height))
{
pos.y += 20;
}
if(Gdx.input.isKeyPressed(Keys.RIGHT) && pos.x <= (720 - pos.width - 35))
{
pos.x += 20;
}
if(Gdx.input.isKeyPressed(Keys.LEFT) && pos.x >=0)
{
pos.x -= 20;
}
if(Gdx.input.isKeyPressed(Keys.UP) && pos.y <= (1280 - pos.height - 35))
{
pos.y += 20;
}
if(Gdx.input.isKeyPressed(Keys.DOWN) && pos.y >= 0)
{
pos.y -= 20;
}
Preferences prefs = Gdx.app.getPreferences("my-preferences");
prefs.putFloat("X", pos.x);
prefs.putFloat("Y", pos.y);
prefs.flush();
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void show()
{
// TODO show()
camera = new OrthographicCamera();
camera.setToOrtho(false, w, h);
texture = new Texture(Gdx.files.internal("Jeff_the_Happy_Clown.png"));
background = new Texture(Gdx.files.internal("babe_BG.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
background.setFilter(TextureFilter.Linear, TextureFilter.Linear);
batch = new SpriteBatch();
pos = new Rectangle();
pos.width = 100;
pos.height = 100;
pos.x = (w/2) - (pos.width/2);
pos.y = (h/2) - (pos.height/2);
BG_pos = new Rectangle();
BG_pos.width = background.getWidth();
BG_pos.height = background.getHeight();
BG_pos.x = (w/2) - (BG_pos.width/2);
BG_pos.y = (h/2) - (BG_pos.height/2);
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose()
{
// TODO dispose
batch.dispose();
texture.dispose();
}
}
Start.java
package com.test.save_and_load_test;
import com.badlogic.gdx.Game;
public class Start extends Game
{
@Override
public void create()
{
setScreen(new Save_and_Load_Test(this));
}
@Override
public void resume()
{
// Is this method involved for loading the last file game saved?
}
}