在下面的代码中,我从MyGame扩展了Game。我有两个问题:
super、dispose()、pause()和resize(w,h)调用render()方法?许多人没有将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));
}
}有人想解释一下这种情况吗?
发布于 2015-06-08 02:32:46
super方法在超类上调用相同的方法(在本例中为游戏)。如果您使用检查源,您可以在游戏中看到这些方法将调用转发到包含的screen实例(如果有的话)。例如,如果调用将执行render方法的super.render(),则在您的Game.render方法中。
因此,对于您的具体情况,这些方法可能是严格必要的,也可能不是必需的(主要取决于您是否拥有screen集,以及您的屏幕实现本身是否需要回调)。但是,通常情况下,在扩展类的方法实现时,您通常希望调用超类方法,以便完成它需要完成的任务。
许多Libgdx和Android类都是这样设计的(它们实现了一些功能,但是期望子类实现更多,子类被期望调用超类方法)。理想情况下,类上的文档将以某种方式解释,但我认为您应该假设(尤其是在本例中)调用超类方法是正确的。
https://stackoverflow.com/questions/30699772
复制相似问题