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

如何在屏幕libgdx中暂停游戏?

澹台文博
2023-03-14

抱歉我的问题,我被卡住了。我是lib gdx开发游戏的新手,不要严格评判我。我有我的游戏活动:

public class MyGame extends Game {
MenuScreen menu;
SplashScreen splash;
DefendScreen def;

@Override
public void create() {
    // Gdx.app.log("LogGame", "MyGame create");
    menu = new MenuScreen(this);
    splash = new SplashScreen(this);
    def = new DefendScreen(this);
    setScreen(splash);


}

@Override
public void resize(int width, int height) {

}

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

@Override
public void pause() {
    super.pause();

}

@Override
public void resume() {
    super.resume();

}

@Override
public void dispose() {

}

}

我有两个屏幕:

public class MenuScreen implements Screen, InputProcessor {
public MenuScreen(final MyGame gam) {
    game = gam;
    cam = new OrthographicCamera();
    cam.setToOrtho(false, 800, 480);
    w = Gdx.graphics.getWidth();
    h = Gdx.graphics.getHeight();
    defScreen = new DefendScreen(game);
    spriteBatch = new SpriteBatch();
    stage = new Stage();
}
@Override
public void dispose() {
    Gdx.app.log("LogGame", "splashs dispose");
    Gdx.input.setInputProcessor(null);

    try {

        spriteBatch.dispose();
        stage.dispose();
        font12.dispose();
    } catch (Exception e) {

    }

}

@Override
public void hide() {
    // TODO Auto-generated method stub

}
@Override
public void pause() {



}
@Override
public void render(float arg0) {
    SetCamera(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2f);
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(); // update all actors
    stage.draw();

}
@Override
public void resize(int arg0, int arg1) {
}

@Override
public void resume() {
    // TODO Auto-generated method stub

}
@Override
public void show() {
    stage.addActor(new WorldMenu(new Texture(Gdx.files
            .internal("images/bg/pause_back.png"))));

    Gdx.input.setInputProcessor(stage);
    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(
            Gdx.files.internal("font/trebuchet_ms.ttf"));
    FreeTypeFontParameter parameter = new FreeTypeFontParameter();
    parameter.size = 25;
    font12 = generator.generateFont(parameter);
    generator.dispose();

    DrawLeftMeu();
    DrawRightMeu();
    DrawSetingsMenu();

}}

还有我有暂停按钮的游戏屏幕:

public class DefendScreen implements Screen, InputProcessor {
public DefendScreen(final MyGame gam) {
    game = gam;
    cam = new OrthographicCamera();
    cam.setToOrtho(false, 800, 480);
    startTime = TimeUtils.millis();
    spriteBatch = new SpriteBatch();

    stage = new Stage();
    w = Gdx.graphics.getWidth();
    h = Gdx.graphics.getHeight();

}
@Override
public void dispose() {
    Gdx.app.log("LogGame", "defend dispose");
    try {
        combo0.dispose();
        combo1.dispose();
        combo2.dispose();
        good0.dispose();
        good1.dispose();
        bad0.dispose();
        bad1.dispose();
        bad2.dispose();
        bad3.dispose();
        bad4.dispose();
        music.dispose();
        music.stop();
        spriteBatch.dispose();
        font.dispose();
        pbar.dispose();
        scores.dispose();

    } catch (Exception e) {

    }

}
@Override
public void hide() {
}

@Override
public void pause() {

    // this.state = State.PAUSE;
}
@Override
public void render(float delta) {
    SetCamera(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2f);
    switch (state) {
    case RUN:
        RunGame();
        break;
    case PAUSE:
        // do stuff here

        break;
    case RESUME:

        break;

    default:
        break;
    }

}
@Override
public void resize(int arg0, int arg1) {
}

@Override
public void resume() {
    this.state = State.RESUME;
}

@Override
public void show() {

    regions = new ArrayList<Integer>();

    addRegions();
    initSounds();
    speedgame = speedgameEasy;

    stage.addActor(worldActor);
    stage.addActor(pauseActor);
    startTime = TimeUtils.millis();

    stage.addListener(clickList);

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(
            Gdx.files.internal("font/trebuchet_ms.ttf"));
    FreeTypeFontParameter parameter = new FreeTypeFontParameter();
    parameter.size = 25;
    font = generator.generateFont(parameter);
    generator.dispose();

    pbar = new Texture(Gdx.files.internal("images/bg/line_indicator.png"));
    scores = new Texture(
            Gdx.files.internal("images/game_images/scorebox.png"));

    Gdx.input.setInputProcessor(stage);
    Gdx.input.setCatchBackKey(true);
}}

还有我的主要问题--

共有1个答案

林和畅
2023-03-14

在您的游戏屏幕中,您应该有一个按钮(添加到舞台上的演员),它实现了一个ClickListener,根据游戏的当前状态调用暂停()恢复()

应该是这样的:

pauseButton.addListener(new ClickListener() {
        public void clicked(InputEvent evt, float x, float y) {
            if (!paused) Gdx.app.getApplicationListener().pause();
            else Gdx.app.getApplicationListener().resume();
        }
    });

其中暂停是游戏屏幕类中的布尔变量

在我看来,这是最简单的方法。

 类似资料:
  • 当我的游戏结束时,我试图改变屏幕到游戏结束屏幕,但它没有这样做,只是闪烁当前的游戏屏幕。 游戏结束画面

  • 问题内容: 我在Swift中创建了一个游戏,其中涉及怪物的出现。怪物根据计时器的出现和消失如下: 然后我就这样称呼它(例如在2秒后生成): 然后,我进行了类似的隐藏操作(在x秒后,我将怪物消灭了)。 因此,我在屏幕顶部创建了一个设置图标,当您点击它时,会出现一个巨大的矩形窗口以更改游戏设置,但是自然的问题是怪物仍然在背景中生成。如果我将玩家带到另一个屏幕,我相信我会失去我所有的游戏状态,并且必须重

  • 我需要提高游戏屏幕加载时间的Android游戏,使用LibGdx游戏引擎。我已经实现了一些类(ImageProvider和SoundManager),它们负责预加载游戏的资产和音频部分。所以,问题是我如何加载这些游戏资源而不影响游戏屏幕之间的加载时间? 我在网上搜索了这个问题,在Stack上发现了一些类似的问题。 如何减少libgdx中所有资产的加载时间 LibGDX中的AssetManager

  • 多亏了我在这个论坛上解决其他问题的帮助,我成功地推进了我的项目,但另一个障碍出现在我的道路上。 我有麻烦在libgdx java实现多个屏幕。我想知道如何实现多个屏幕(一个用于主菜单,一个用于播放,一个用于加载屏幕,...)。 关于我应该如何构造我的屏幕类的一个例子或一些解释将非常有帮助。我试着实现我自己的屏幕管理器,但不太顺利...还有一些关于我应该如何处理屏幕的提示,因为每次从主菜单到播放或选

  • null 这是这个问题的视频 下面是我如何切换屏幕的代码: 从游戏第一次打开到主菜单: GamesCreen:

  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。