我认为我有资产问题。由于ram,我无法在adroid设备上运行游戏。我的设备有200mb免费ram,但应用程序无法运行并关闭。当它在PC上运行时多次运行正常,200-300mb ram并且有时会增加并增加1.5gb -2gb ......并且游戏没有响应。
我会把我的代码和疾病告诉你我试图解决这个问题。我是新人,也许我的错误很少。
public class MyGame extends Game {
public MainMenuScreen menu_screen;
public GameScreen game_screen;
public HelpScreen help_screen;
public LevelScreen level_screen;
public LoadingScreen loading_screen;
int delay = 0;
@Override
public void create() {
loading_screen = new LoadingScreen(this);
setScreen(loading_screen);
AssetsGame.load();
AssetsLoad.load();
AssetsMenu.load();
Timer.schedule(new Task(){
@Override
public void run() {
setScreen(setMainMenuScreen());
}
}, delay);
}
public Screen setGameScreen() {
game_screen = new GameScreen(this);
return game_screen;
}
public Screen setMainMenuScreen() {
menu_screen = new MainMenuScreen(this);
return menu_screen;
}
public Screen setMenuScreen() {
menu_screen = new MainMenuScreen(this);
return menu_screen;
}
public Screen setLevelScreen() {
level_screen = new LevelScreen(this);
return level_screen;
}
public Screen setHelpScreen() {
help_screen = new HelpScreen(this);
return game_screen;
}
}
那是主要的课程
我创建了4个Assets类AssetsLevel(包含级别屏幕的资源)AssetsMenu(使用菜单屏幕的资产)AssetsGame(使用游戏的资产)等。
AssetsMenu:
public class AssetsMenu {
public static Texture texture_menuback;
public static Sprite menuback;
public static Stage stagemenu;
public static TextureAtlas atlasmenu;
public static Button playbutton;
public static ButtonStyle playbuttonstyle;
public static Button helpbutton;
public static ButtonStyle helpbuttonstyle;
public static Button settingsbutton;
public static ButtonStyle settingsbuttonstyle;
public static Button quitbutton;
public static ButtonStyle quitbuttonstyle;
public static Skin skinmenu;
public static void load(){
stagemenu = new Stage();
skinmenu = new Skin();
Gdx.input.setInputProcessor(stagemenu);
atlasmenu = new TextureAtlas(Gdx.files.internal("gamemenu.atlas"));
skinmenu.addRegions(atlasmenu);
playbuttonstyle = new ButtonStyle();
playbuttonstyle.up = skinmenu.getDrawable("Play");
playbuttonstyle.down = skinmenu.getDrawable("PlayClick");
playbutton = new Button(playbuttonstyle);
playbutton.setSize((360*Gdx.graphics.getWidth())/640, (50*Gdx.graphics.getHeight())/480);
playbutton.setPosition((150*Gdx.graphics.getWidth())/640, 300);
helpbuttonstyle = new ButtonStyle();
helpbuttonstyle.up = skinmenu.getDrawable("Help");
helpbuttonstyle.down = skinmenu.getDrawable("HelpClick");
helpbutton = new Button(helpbuttonstyle);
helpbutton.setSize((360*Gdx.graphics.getWidth())/640, (50*Gdx.graphics.getHeight())/480);
helpbutton.setPosition((150*Gdx.graphics.getWidth())/640, 240);
settingsbuttonstyle = new ButtonStyle();
settingsbuttonstyle.up = skinmenu.getDrawable("Settings");
settingsbuttonstyle.down = skinmenu.getDrawable("SettingsClick");
settingsbutton = new Button(settingsbuttonstyle);
settingsbutton.setSize((360*Gdx.graphics.getWidth())/640, (50*Gdx.graphics.getHeight())/480);
settingsbutton.setPosition((150*Gdx.graphics.getWidth())/640, 180);
quitbuttonstyle = new ButtonStyle();
quitbuttonstyle.up = skinmenu.getDrawable("Exit");
quitbuttonstyle.down = skinmenu.getDrawable("ExitClick");
quitbutton = new Button(quitbuttonstyle);
quitbutton.setSize((360*Gdx.graphics.getWidth())/640, (50*Gdx.graphics.getHeight())/480);
quitbutton.setPosition((150*Gdx.graphics.getWidth())/640, 120);
stagemenu.addActor(playbutton);
stagemenu.addActor(helpbutton);
stagemenu.addActor(settingsbutton);
stagemenu.addActor(quitbutton);
}
}
当我点击播放然后必须显示关卡屏幕,但不是.. ram增加,有时显示关卡屏幕
MainMenuScreen:
public class MainMenuScreen implements Screen {
MyGame game;
OrthographicCamera camera;
SpriteBatch batch;
Vector3 touch;
Orientation orientation;
public static MainMenuScreen level_screen;
int delay = 5;
public MainMenuScreen(MyGame game){
this.game = game;
camera = new OrthographicCamera();
camera.setToOrtho(true,1800,1800);
batch = new SpriteBatch();
touch = new Vector3();
orientation = Gdx.input.getNativeOrientation();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0F, 255F, 0F, 1F);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
generalUpdate(touch, camera);
batch.setProjectionMatrix(camera.combined);
batch.begin();
AssetsMenu.stagemenu.draw();
batch.end();
}
private void generalUpdate(Vector3 touch, OrthographicCamera camera) {
AssetsMenu.playbutton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
AssetsLevel.load();
game.setScreen(game.setLevelScreen());
}
});
AssetsMenu.settingsbutton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
}
});
AssetsMenu.helpbutton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
game.setScreen(game.level_screen);
}
});
AssetsMenu.quitbutton.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
Gdx.app.exit();
}
});
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}
@Override
public void hide() {
dispose();
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
AssetsMenu.atlasmenu.dispose();
batch.dispose();
AssetsMenu.stagemenu.dispose();
AssetsMenu.skinmenu.dispose();
}
}
加载屏幕:
public class LoadingScreen implements Screen {
MyGame game;
OrthographicCamera camera;
SpriteBatch batch;
Vector3 touch;
Orientation orientation;
Stage stage;
TextureAtlas atlas;
Button level1button;
ButtonStyle level1buttonstyle;
Button level2button;
ButtonStyle level2buttonstyle;
Button level3button;
ButtonStyle level3buttonstyle;
Skin skin;
public static GameScreen game_screen;
static float stateTime;
public LoadingScreen(MyGame game){
this.game = game;
camera = new OrthographicCamera();
camera.setToOrtho(true,1800,1800);
batch = new SpriteBatch();
touch = new Vector3();
orientation = Gdx.input.getNativeOrientation();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0F, 255F, 0F, 1F);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
stateTime += Gdx.graphics.getDeltaTime();
AssetsLoad.loadingcurrentFrame = AssetsLoad.loadingAnimation.getKeyFrame(stateTime, true);
camera.update();
generalUpdate(touch, camera);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(AssetsLoad.logo, 180, 200);
batch.draw(AssetsLoad.loadingcurrentFrame, 770, 750);
batch.end();
}
private void generalUpdate(Vector3 touch, OrthographicCamera camera) {
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}
@Override
public void hide() {
dispose();
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void dispose() {
AssetsLoad.loadingSheet.dispose();
AssetsLoad.texture_logo.dispose();
}
}
谢谢!