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

LibGDX:屏幕界面和游戏类之间的关系

敖涵容
2023-03-14

我想了解游戏类和屏幕界面之间的关系。在我正在阅读的教科书中,它指出Game类将函数从ApplicationListener委托给screen对象。这让你可以切换屏幕。我不明白,为什么会这样,它是如何工作的?

我目前的理解是:游戏从ApplicationListener(Create()、Render()等)实现生命周期方法。但您不直接从ApplicationListener实现的原因是,如果您从Game类扩展,Game类将允许您创建多个屏幕。

共有2个答案

上官扬
2023-03-14

ApplicationListener只是一个接口,您可以直接用类实现它。游戏类正在实现ApplicationListener接口。在游戏类中,它包含一个屏幕界面,允许您更改屏幕。下面是Libgdx游戏类中的内容。

public abstract class Game implements ApplicationListener {
protected Screen screen;

@Override
public void dispose () {
    if (screen != null) screen.hide();
}

@Override
public void pause () {
    if (screen != null) screen.pause();
}

@Override
public void resume () {
    if (screen != null) screen.resume();
}

@Override
public void render () {
    if (screen != null) screen.render(Gdx.graphics.getDeltaTime());
}

@Override
public void resize (int width, int height) {
    if (screen != null) screen.resize(width, height);
}

/** Sets the current screen. {@link Screen#hide()} is called on any old screen, and {@link Screen#show()} is called on the new
 * screen, if any.
 * @param screen may be {@code null} */
public void setScreen (Screen screen) {
    if (this.screen != null) this.screen.hide();
    this.screen = screen;
    if (this.screen != null) {
        this.screen.show();
        this.screen.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    }
}

/** @return the currently active {@link Screen}. */
public Screen getScreen () {
    return screen;
}

}

宗政法
2023-03-14

LibGDX的“核心”始终是您的ApplicationListener
它包含不同平台提供的所有生命周期挂钩(包括createdispose等)
Game只是ApplicationListener的一个实现,包含最常见的行为。对于大多数游戏来说,这个类做得很好,如果你需要一些特殊的行为,你需要重写它或者自己实现ApplicationListener
屏幕界面并不重要,但它也非常有用
它允许您将游戏分成不同的部分
例如,您可以使用菜单屏幕游戏屏幕
菜单屏幕显示一个简单的菜单,带有“设置”、“高分”和“播放”按钮
然后游戏屏幕包含实际的游戏逻辑和渲染
但是,默认情况下,Screens不做任何事情,他们甚至不会得到关于生命周期挂钩的通知
这就是游戏-类的作用:
游戏-类包含一个屏幕-实例,即活动的屏幕。然后,它将生命周期事件通知当前的屏幕,如渲染。然后,屏幕可以将此事件告知汽车
如果您想切换屏幕,只需调用游戏即可。设置屏幕(新闻屏幕)游戏-类然后为当前的屏幕调用隐藏(您可能希望在此处处置一些资产,或者保存用户进度),然后为新的屏幕调用显示(您可以在此处加载一些资产并初始化新的屏幕)。

TL;DR
应用程序列表是游戏的入口点。每个游戏只有一个ApplicationListener,LibGDX框架会通知它生命周期事件。

屏幕是游戏的不同部分,包含不同的日志和视图(例如菜单屏幕和游戏屏幕)。代码>.

在某种程度上,游戏类是应用程序监听器接口的默认实现,并将大部分工作委托给当前的屏幕。它还包含用于切换屏幕的日志。

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

  • 我们正在使用libgdx开发一款游戏,我们希望能够切换屏幕。我制作了一个GameOverScreen,它实现了Screen: 我的问题是我不知道如何在我的主课上设置屏幕。我看到的大多数示例都显示了一个扩展游戏的主类(com.badlogic.gdx.Game)。但我们的主类实现ApplicationListener,不扩展游戏: 因此,我不能使用来自Game类的setScreen方法。所以我如何能

  • 我试图改变Libgdx屏幕之间的动画。我想写我的自定义动画(淡入淡出等)。有人能给我个线索吗?我似乎在Libgdx代码中找不到转换的实现。

  • 问题内容: 大家好,我仍在从事这个libgdx项目的工作,我试图找出将屏幕切换到游戏屏幕的最佳方法。现在,当单击一个按钮时,我需要它来切换到游戏屏幕。我已经看到了一些扩展游戏类的实现方式,但是我不确定这里最好的方法是什么。如果您看到一些可以改进的代码,请告诉我。 这是主要的应用程序类: 问题答案: 这就是我始终执行屏幕切换的方式: 首先,主类需要扩展Game(From ),然后您需要具有一个新的t

  • 大家好,我仍然在做这个libgdx项目,我正在努力找出最好的方法来改变我的游戏屏幕现在,当一个按钮被点击时,我需要它转换到游戏屏幕。我见过一些扩展game类的实现,但我不确定从这里开始最好的方法是什么。如果你看到一些可以改进的代码,请让我知道。 以下是主要的应用程序类:

  • 我在 Libgdx 游戏上的触摸接收器有问题。 在我的玩家主页上,我有这个: 当我运行我的游戏时,除了触摸监听器有时工作正常,但是在触摸几秒钟后。 Gdx.app.log(“已点击”、“已触摸”);通过触摸发射。 但是Gdx.app.log("点击了","很棒");或者Gdx.app.log("Clicked "," nooooooooooo ");我必须执行长按,直到触摸被触发。 谢谢 我添加了