什么时候使用 super.render(); super.dispose();super.pause();和 super.resize(w,h);在 Libgdx?
When to use super.render(); super.dispose();super.pause(); and super.resize(w,h); in Libgdx?
在下面的代码中,我从 Game
扩展了 MyGame
。我有两个问题:
是否需要为所有 render()
、dispose()
、pause()
和 resize(w,h)
调用 super
方法?
很多人没有把super.pause()
和super.resize(w,h)
放在代码里。
所以,我对这里的超级调用很困惑。
我尝试删除所有上述超级方法(super.render()
;也删除了),我仍然可以 运行 我的代码在桌面模式下成功(即 desktopLauncher.java).有人可以解释为什么吗?
这是我的代码:
public class MyGame extends Game {
Game game;
@Override
public void create() {
game = this;
setScreen(new MainMenu(game));
}
@Override
public void render() {
super.render();
}
@Override
public void dispose() {
super.dispose();
}
@Override
public void pause() {
super.pause();
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
}
如果我删除所有未使用的方法并只保留 create() 方法如下,我将 运行 代码成功。
public class MyGame extends Game {
Game game;
@Override
public void create() {
game = this;
setScreen(new MainMenu(game));
}
}
有人想解释一下这种情况吗?
super
方法在超级 class 上调用相同的方法(在本例中 Game). If you check the source,您可以看到 Game 上的那些方法只是将调用转发给包含 screen
实例(如果有)。例如,在您的 render
方法中,如果您调用 super.render()
将执行 Game.render
方法。
因此,对于您的具体情况,这些方法可能是也可能不是绝对必要的(主要取决于您是否设置了 screen
以及您的屏幕实现本身是否需要回调)。但是,一般来说,在扩展 class 方法的实现时,您通常希望调用超级 class 方法,以便完成需要完成的任何事情。
许多 Libgdx 和 Android classes 都是这样设计的(它们实现了一些功能,但期望 subclasses 实现更多,并且subclass 应该调用 superclass 方法)。理想情况下,class 上的文档会以一种或另一种方式进行解释,但我认为您应该假设(尤其是在这种情况下)调用 superclass 方法是正确的做法。
在下面的代码中,我从 Game
扩展了 MyGame
。我有两个问题:
是否需要为所有
render()
、dispose()
、pause()
和resize(w,h)
调用super
方法? 很多人没有把super.pause()
和super.resize(w,h)
放在代码里。 所以,我对这里的超级调用很困惑。我尝试删除所有上述超级方法(
super.render()
;也删除了),我仍然可以 运行 我的代码在桌面模式下成功(即 desktopLauncher.java).有人可以解释为什么吗?
这是我的代码:
public class MyGame extends Game {
Game game;
@Override
public void create() {
game = this;
setScreen(new MainMenu(game));
}
@Override
public void render() {
super.render();
}
@Override
public void dispose() {
super.dispose();
}
@Override
public void pause() {
super.pause();
}
@Override
public void resize(int width, int height) {
super.resize(width, height);
}
}
如果我删除所有未使用的方法并只保留 create() 方法如下,我将 运行 代码成功。
public class MyGame extends Game {
Game game;
@Override
public void create() {
game = this;
setScreen(new MainMenu(game));
}
}
有人想解释一下这种情况吗?
super
方法在超级 class 上调用相同的方法(在本例中 Game). If you check the source,您可以看到 Game 上的那些方法只是将调用转发给包含 screen
实例(如果有)。例如,在您的 render
方法中,如果您调用 super.render()
将执行 Game.render
方法。
因此,对于您的具体情况,这些方法可能是也可能不是绝对必要的(主要取决于您是否设置了 screen
以及您的屏幕实现本身是否需要回调)。但是,一般来说,在扩展 class 方法的实现时,您通常希望调用超级 class 方法,以便完成需要完成的任何事情。
许多 Libgdx 和 Android classes 都是这样设计的(它们实现了一些功能,但期望 subclasses 实现更多,并且subclass 应该调用 superclass 方法)。理想情况下,class 上的文档会以一种或另一种方式进行解释,但我认为您应该假设(尤其是在这种情况下)调用 superclass 方法是正确的做法。