首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在Libgdx中使用super.render()、super.dispose();super.pause()和super.resize(w,h)?

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

Stack Overflow用户
提问于 2015-06-08 00:17:11
回答 1查看 2.3K关注 0票数 1

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

  1. 我们是否需要为所有的superdispose()pause()resize(w,h)调用render()方法?许多人没有将super.pause()super.resize(w,h)放在代码中。所以,我对这里的超级电话感到很困惑。
  2. 我尝试删除所有上述超级方法(super.render();也删除),我仍然可以在桌面模式(即desktopLauncher.java)下成功地运行我的代码。谁能解释一下原因吗?

这是我的代码:

代码语言:javascript
复制
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()方法,我将成功地运行代码。

代码语言:javascript
复制
    public class MyGame extends Game {
    Game game;

    @Override
    public void create() {
        game = this;
        setScreen(new MainMenu(game));
    }
    }

有人想解释一下这种情况吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-08 02:32:46

super方法在超类上调用相同的方法(在本例中为游戏)。如果您使用检查源,您可以在游戏中看到这些方法将调用转发到包含的screen实例(如果有的话)。例如,如果调用将执行render方法的super.render(),则在您的Game.render方法中。

因此,对于您的具体情况,这些方法可能是严格必要的,也可能不是必需的(主要取决于您是否拥有screen集,以及您的屏幕实现本身是否需要回调)。但是,通常情况下,在扩展类的方法实现时,您通常希望调用超类方法,以便完成它需要完成的任务。

许多Libgdx和Android类都是这样设计的(它们实现了一些功能,但是期望子类实现更多,子类被期望调用超类方法)。理想情况下,类上的文档将以某种方式解释,但我认为您应该假设(尤其是在本例中)调用超类方法是正确的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30699772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档