我想了解Game类和Screen Interface之间的关系。在我正在阅读的教科书中,它指出Game类将ApplicationListener中的函数委托给一个屏幕对象。不知何故,这可以让你切换屏幕。我不明白,为什么会这样呢?它是如何运作的?
我目前的理解:Game从ApplicationListener实现生命周期方法(Create(),Render()等...)。但是你不能直接从ApplicationListener实现的原因是因为如果你从Game类扩展,Game类将允许你创建多个屏幕。
答案 0 :(得分:1)
ApplicationListener只是一个接口,您可以直接在您的类中实现它。 Game类正在实现ApplicationListener接口。在Game类中,它包含一个Screen界面,可以让你更改屏幕。以下是Libgdx中Game类的内容。
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;
}
}
答案 1 :(得分:1)
LibGDX的“核心”始终是您的ApplicationListener
类
它包含不同平台提供的所有Lifecycle-Hook(包括create
,dispose
等)。
类Game
只是ApplicationListener
的一个实现,包含最常见的行为。对于大多数游戏来说,这个课程做得很好,如果你需要一些特殊的行为,你需要覆盖它或者自己实现ApplicationListener
。
Screen
界面并不重要,但它也非常有用
它允许您将游戏分成不同的部分
例如,您可以拥有MenuScreen
和GameScreen
MenuScreen
显示一个简单的菜单,其中包含“设置”,“高分”和“播放” - 按钮。
然后GameScreen
包含实际的游戏逻辑和渲染
但是,默认情况下Screen
不执行任何操作,甚至不会收到有关Lifecycle-Hooks的通知。
那就是Game
- 类所在的那个:
Game
- 类包含一个Screen
- 实例,即活动Screen
。然后,它会通知当前Screen
生命周期事件,例如render
。然后Screen
可以了解此事件
如果您想切换Screen
,只需拨打Game.setScreen(newScreen)
即可。然后,Game
- 类会针对当前hide
调用Screen
(您可能希望在此处置某些资源,或保存用户进度),然后show
为新Screen
{1}}(您可以在这里加载一些资源并初始化新的Screen
)。
<强> TL; DR 强>
ApplcationListener
是游戏的切入点。每个游戏只有一个ApplicationListener
,它通过LibGDX框架获得生命周期事件的通知。
Screen
是游戏的不同部分,包含不同的logik和视图(例如MenuScreen
和GameScreen
)。
Screen
- 类封装了单个Screen
的逻辑。
Game
- 类在某种程度上是ApplicationListener
接口的默认实现,并将大部分工作委托给当前Screen
。它还包含用于切换Screen
。