当前位置: 首页 > 知识库问答 >
问题:

如何正确设置libgdx中的屏幕

汪坚
2023-03-14
    null

这是这个问题的视频

下面是我如何切换屏幕的代码:

从游戏第一次打开到主菜单:

public class RadiationPigeon extends Game {

public static final float PPM = 100;

public static SpriteBatch batch;


@Override
public void create () {
    batch = new SpriteBatch();
    setScreen(new MainMenuScreen(this));
}

@Override
public void render () {
    super.render();
}


@Override
public void dispose () {
    batch.dispose();
}}
private RadiationPigeon radiationPigeon;

public MainMenuScreen(RadiationPigeon radiationPigeon){
    this.radiationPigeon = radiationPigeon;
}

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

            return true;

        }

        public void touchUp (InputEvent event, float x, float y, int pointer, int button) {

            radiationPigeon.setScreen(new GameScreen(radiationPigeon)); 
//I give GameScreen radiationpigeon so that the screen can be set back to MainMenu

        }
    });
private RadiationPigeon radiationPigeon;

public GameScreen(RadiationPigeon radiationPigeon){

    world.setContactListener(new ContactListener());
    Timer timer = new Timer();
    timer.schedule(new BatAttackChanceCounter(), 0, 1000);
    this.radiationPigeon = radiationPigeon;
}

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

            return true;

        }

        public void touchUp (InputEvent event, float x, float y, int pointer, int button) {

            //paused = true;
            radiationPigeon.setScreen(new MainMenuScreen(radiationPigeon));

        }
    });
@Override
public void render(float delta) {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act();
    RadiationPigeon.batch.begin();
    stage.draw();
    RadiationPigeon.batch.end();

}

GamesCreen:

@Override
public void render(float delta) {

    update(delta);

    Gdx.gl.glClearColor(0, 0,0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    RadiationPigeon.batch.setProjectionMatrix(pigeoncam.combined);

    RadiationPigeon.batch.begin();

    //RadiationPigeon.batch.draw(pausedScreen, pigeoncam.position.x - (250 / RadiationPigeon.PPM), pigeoncam.position.y - pigeoncam.viewportHeight / 2, 5, 5);


    RadiationPigeon.batch.end();


    b2dr.render(world, pigeoncam.combined);

    stage.draw();

    hud.stage.draw();
}

共有1个答案

苏振国
2023-03-14

经过多次反复试验,我终于解决了我的问题。我设置屏幕的方式没有问题(对于任何设置屏幕有困难的人,我提供的代码可以工作)。问题出在实际的按钮和图像上。我做了一些静态的,因为我需要在GamesCreen中使用相同的按钮样式和字体。我认为这会节省内存,但是,一旦在创建它们的屏幕之外(MainMenuScreen)访问它们,它们将丢失所有的值,基本上使它们为空,而不使它们为空。

对按钮的工作方式缺乏了解是造成这个问题的原因

编辑:

 类似资料:
  • 问题内容: 我在设置布局时遇到一些问题。(不要介意按钮的大小,我只想正确地了解布局)。 Here’s my code: 谁能帮助我了解布局的工作原理? 我一直在观看很多视频,并尝试过不同的布局,但仍然无法正确完成。告诉我是否使用了正确的布局,或者是否应该更改布局 。 问题答案: 如 该答案中所建议的那样,可以为左部分提供所需的全部控制。如果您愿意为简单起见而牺牲一些控制权,则可以在a里面放两个面板

  • 问题内容: 我正在尝试运行Java程序,但是它采用默认的GMT时区而不是OS定义的时区。我的JDK版本是1.5,操作系统是Windows Server Enterprise(2007) Windows指定了中央时区,但是当我运行以下程序时,它给了我GMT时间。 这是输出 请注意,我不想从应用程序中设置时区。我希望JVM使用的时区应该是操作系统中指定的时区。(对于具有JDK 1.4版和Microso

  • 问题内容: 我不时看到有关连接数据库的问题。 大多数答案不是我做的方式,否则我可能只是无法正确获得答案。无论如何; 我从未考虑过,因为我的工作方式对我有效。 但是这里有个疯狂的想法;也许我做错了所有,如果是这样的话;我真的很想知道如何使用PHP和PDO正确连接到MySQL数据库并使其易于访问。 这是我的做法: 首先,这是我的文件结构 (向下精简) : index.php 在最顶部,我有。 load

  • 问题内容: 我有一个关于mysql时区的怪异问题。 在我的网站配置文件中,我这一行设置了时区: 有趣的是,如果我在此之后添加另一行,例如: 执行该代码后,时间将正确显示。 但是,在其他一些查询中,我在表中插入行,这些表的列名为date,默认为CURRENT_TIMESTAMP。 这样插入行: (“会话”表的列默认为CURRENT_TIMESTAMP) 但是插入到数据库中的值仍指向服务器的时区:((

  • 问题内容: 遵循OnlyOffice帮助中心的说明,将创建由浏览器声明为无效的安全证书,因为它是自签名的。 目的是在适用于NextCloud的Docker上使用OnlyOffice的服务器,该服务器已在另一台服务器上正常运行。 当前,已在说明建议的目录中创建证书: 我已经按照所有给定的步骤进行操作,但是它不起作用。 有没有办法使用LetsEncrypt代替自签名证书? 我不是IT管理人员,我是一个

  • 我正在使用Android中的recyclerview进行网格布局。网格占据屏幕的一部分并有阴影。为了得到想要的阴影效果,我使用了12dp的高度值。但它似乎不起作用,因为我看不到网格的任何仰角(阴影)。为什么会出现这种情况?recyclerview不支持仰角吗?