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

时间:2015-06-08 00:17:12

标签: java android inheritance libgdx super

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

  1. 我们是否需要为所有superrender()dispose()pause()调用resize(w,h)方法? 很多人没有在代码中添加super.pause()super.resize(w,h)。 所以,我对这里的超级电话非常困惑。

  2. 我尝试删除所有上述超级方法(super.render();也已删除),我仍然可以在桌面模式下成功运行我的代码(即desktopLauncher.java)。有人可以解释原因吗?

  3. 这是我的代码:

    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));
        }
        }
    

    有人想解释这种情况吗?

1 个答案:

答案 0 :(得分:3)

super方法在超类上调用相同的方法(在本例中为Game)。如果您check the source,您可以在Game上看到这些方法,只需将调用转发给包含screen实例(如果有)。例如,如果您调用将执行render方法的super.render(),则在Game.render方法中。

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

许多Libgdx和Android类都是以这种方式设计的(它们实现了一些功能但希望子类实现更多,并且子类应该调用超类方法)。理想情况下,类的文档可以解释这种或那种方式,但我认为你应该假设(特别是在这种情况下)调用超类方法是正确的做法。