首页 > 解决方案 > libgdx 在屏幕之间切换非常慢,有时会在没有任何日志的情况下崩溃

问题描述

我正在使用 libgdx 来构建我的游戏,我正在使用多个屏幕,并且在它们之间切换非常慢,并且有时在没有任何登录 android 设备的情况下会导致游戏崩溃。我该如何解决这个问题?我完全不知道这个问题的原因。我在课堂上使用了几个动画和几个图像按钮,并使用了三个这样的类。

public class BabyGreen extends BabyScreen {


private BabyActor bg;
private BabyActor phone;
private AnimatedActor common;
private AnimatedActor plane,car,heli,boat,train,sub,truck,bus,police;
private ImageButton buttonLeft,buttonRight,buttonCenter;
private ImageButton 
button1,button2,button3,button4,button5,button6,button7,button8,button9;
private AnimatedActor actor;


public BabyGreen(Game g){
    super(g);
}

public void create () {


    bg = new BabyActor();
    bg.setTexture(new Texture("background-green.png"));
    bg.setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());


    phone = new BabyActor();
    phone.setTexture(new Texture("green-phone.png"));
    phone.setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());


    TextureRegion btLeft = new TextureRegion(new 
    Texture("ANIMALOFF.png"));
    Drawable drawableLeft = new TextureRegionDrawable(new 
    TextureRegion(btLeft));
    buttonLeft = new ImageButton(drawableLeft);

    TextureRegion btRight = new TextureRegion(new 
    Texture("NUMBEROFF.png"));
    Drawable drawableRight = new TextureRegionDrawable(new 
    TextureRegion(btRight));
    buttonRight = new ImageButton(drawableRight);

    TextureRegion btCenter = new TextureRegion(new 
    Texture("PHONEOFF.png"));
    Drawable drawableCenter = new TextureRegionDrawable(new 
    TextureRegion(btCenter));
    buttonCenter = new ImageButton(drawableCenter);

    TextureRegion bt1 = new TextureRegion(new Texture("PLANEOFF.png"));
    Drawable drawable = new TextureRegionDrawable(new 
    TextureRegion(bt1));
    button1 = new ImageButton(drawable);

    TextureRegion bt2 = new TextureRegion(new Texture("CAROFF.png"));
    Drawable drawable1 = new TextureRegionDrawable(new 
    TextureRegion(bt2));
    button2 = new ImageButton(drawable1);

    TextureRegion bt3 = new TextureRegion(new Texture("HELIOFF.png"));
    Drawable drawable2 = new TextureRegionDrawable(new 
    TextureRegion(bt3));
    button3 = new ImageButton(drawable2);

    TextureRegion bt4 = new TextureRegion(new Texture("BOATOFF.png"));
    Drawable drawable3 = new TextureRegionDrawable(new 
    TextureRegion(bt4));
    button4 = new ImageButton(drawable3);

    TextureRegion bt5 = new TextureRegion(new Texture("TRAINOFF.png"));
    Drawable drawable4 = new TextureRegionDrawable(new 
    TextureRegion(bt5));
    button5 = new ImageButton(drawable4);

    TextureRegion bt6 = new TextureRegion(new Texture("SUBOFF.png"));
    Drawable drawable5 = new TextureRegionDrawable(new 
    TextureRegion(bt6));
    button6 = new ImageButton(drawable5);

    TextureRegion bt7 = new TextureRegion(new Texture("TRUCKOFF.png"));
    Drawable drawable6 = new TextureRegionDrawable(new 
    TextureRegion(bt7));
    button7 = new ImageButton(drawable6);

    TextureRegion bt8 = new TextureRegion(new Texture("BUSOFF.png"));
    Drawable drawable7 = new TextureRegionDrawable(new 
    TextureRegion(bt8));
    button8 = new ImageButton(drawable7);

    TextureRegion bt9 = new TextureRegion(new Texture("POLICEOFF.png"));
    Drawable drawable8 = new TextureRegionDrawable(new 
    TextureRegion(bt9));
    button9 = new ImageButton(drawable8);



    car = new AnimatedActor();
    TextureRegion[] frames2 = new TextureRegion[4];
    for (int n = 1; n <= 4; n++)
    {
        String fileName = "car" + n + ".png";
        Texture tex = new Texture(fileName);
        tex.setFilter(Texture.TextureFilter.Linear, 
    Texture.TextureFilter.Linear);
        frames2[n-1] = new TextureRegion( tex );
    }
    Array<TextureRegion> framesArray2 = new Array<TextureRegion> 
   (frames2);

    final Animation anim2 = new Animation(0.1f, framesArray2, 
   Animation.PlayMode.LOOP);
    car.setAnimation(anim2);

   car.setSize(Gdx.graphics.getWidth()/2*0.5f,
   Gdx.graphics.getHeight()/2*0.5f);
    car.setPosition(phone.getWidth()/100*40,phone.getHeight()/100*55);
    car.setOrigin(car.getWidth()/2,car.getHeight()/2);

     stage.addActor(bg);
    stage.addActor(phone);


    Gdx.input.setInputProcessor(stage);

    buttonLeft.addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int 
    pointer, int button) {

            game.setScreen(new BabyOrange(game));
            return false;
        }
    });
    buttonRight.addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y, int 
    pointer, int button) {

            game.setScreen(new BabyBlue(game));
            return false;
        }
    });

    Table table = new Table();
    table.padLeft(40);
    table.setPosition(phone.getWidth()/2,phone.getHeight()/2*0.6f);
    table.row().size(stage1.getWidth()/100*20,stage1.getWidth()/100*20);
    table.add(buttonLeft);
    table.add(buttonCenter);
    table.add(buttonRight);
    table.row().size(stage1.getWidth()/100*18,stage1.getWidth()/100*18);
    table.add(button1);
    table.add(button2);
    table.add(button3);
    table.row().size(stage1.getWidth()/100*18,stage1.getWidth()/100*18);
    table.add(button4);
    table.add(button5);
    table.add(button6);
    table.row().size(stage1.getWidth()/100*18,stage1.getWidth()/100*18);
    table.add(button7);
    table.add(button8);
    table.add(button9);
    stage.addActor(table);


      }
    public void dispose(){
   stage.dispose();
   stage1.dispose();
   bg.getRegion().getTexture().dispose();
   phone.getRegion().getTexture().dispose();

   car.getRegion().getTexture().dispose();
   truck.getRegion().getTexture().dispose();

   }
   }

标签: libgdx

解决方案


推荐阅读