我知道libGDX中的项目生成器在我的Game项目中find了render(deltatime)
方法,并将其制作成一个游戏循环,以便每秒平均重复60次。 但是我想知道项目生成器如何findrender()
方法。
让我举一个例子:
在我的游戏中,在Main类中,我使用它的构造函数在Main类的create()
中声明了具有自己的render()
方法的SecondClass。 然后,我没有MainClass中的任何render()方法。 当我这样做时,SecondClass中的render()
工作。 但是,当我在MainClass中创建render()
方法时,MainClass中的render()
工作,而不是SecondClass中的render()
方法。 这是否意味着项目生成器访问了第一个可以看作GameLoop的render()
?
项目生成器在这里没有做任何工作,这一切都是由源代码处理,使用dynamic调度(虚函数)和基本的编程逻辑。 阅读源代码是了解如何工作的好方法。
在libGDX中inheritance的Game
基类本身就是ApplicationListener
一个实现,它规定了render()
函数。
Game
类通过检查游戏是否有屏幕来实现render()
,如果是,则调用该屏幕的render()
方法 。
如果您从Game
inheritance并提供render()
,那么您将覆盖Game
类的render方法,而您将被调用。 如果不重写render
,则会调用Game
类的方法,然后沿着调用转发到任何活动屏幕对象的render
方法。
这就是dynamic调度 /虚函数在Java中的工作原理。 没有任何项目生成器正在执行这个任务,所以对源代码没有任何神奇的检查。
生成器仅用于生成一组文件,它们将正确的点代替类和包名称到源代码中,以确保创建类的实例。 这与这个操作没有太大的关系,完全没有必要。 如果你愿意的话,你可以很容易地编写自引导代码。