libgdx ram增加游戏freez可能是错误的资产

时间:2014-06-15 08:37:41

标签: android libgdx

我认为我有资产问题。由于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();
    }

}

谢谢!

0 个答案:

没有答案