gpt4 book ai didi

java - 何时使用 super.render(); super.dispose();super.pause();和 super.resize(w,h);在 Libgdx 中?

转载 作者:行者123 更新时间:2023-11-29 05:04:50 25 4
gpt4 key购买 nike

在下面的代码中,我从 Game 扩展了 MyGame。我有两个问题:

  1. 我们是否需要为所有render()dispose()pause()调用super方法resize(w,h)?很多人都没有把super.pause()super.resize(w,h)放在代码里。所以,我对这里的 super 调用感到很困惑。

  2. 我尝试删除所有上述 super 方法(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 方法在父类(super class)上调用相同的方法(在本例中为 Game )。如果你check the source ,您可以看到 Game 上的那些方法只是将调用转发给包含 screen 的实例(如果有的话)。例如,在您的 render 方法中,如果您调用 super.render() 将执行 Game.render 方法。

因此,对于您的特定情况,这些方法可能是也可能不是绝对必要的(主要取决于您是否设置了 screen 以及您的屏幕实现本身是否需要回调)。但是,一般来说,在扩展类方法的实现时,您通常希望调用父类(super class)方法,以便完成需要完成的任何事情。

许多 Libgdx 和 Android 类都是这样设计的(它们实现了一些功能,但期望子类实现更多,并且期望子类调用父类(super class)方法)。理想情况下,类的文档会以一种或另一种方式进行解释,但我认为您应该假设(尤其是在这种情况下)调用父类(super class)方法是正确的做法。

关于java - 何时使用 super.render(); super.dispose();super.pause();和 super.resize(w,h);在 Libgdx 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com