libGDX отношения классов - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь создать игру с помощью Libgdx Game Class. И я слежу за книгой. Есть пример. В примере 4 класса и 1 DesktopLauncher. DesktopLauncher использует класс StarfishCollector3 () в качестве основной функции. Несмотря на то, что я не вызываю метод create и render, которые находятся в абстрактном классе GameBeta, для StarfishCollector3, проект работает. Не могли бы вы объяснить то, чего я не знаю.

    class StarfishCollector3 : GameBeta() {
    var turtle:Turtle=null
    var starfish:ActorBeta=null
    var ocean:ActorBeta=null
    var winMessage:ActorBeta=null
    var win:Boolean = true

    override fun initialize() {
        ocean= ActorBeta()
        ocean.setTexture(Texture( Gdx.files.internal("water.jpg")  ))
        mainStage.addActor(ocean)

        starfish = ActorBeta();
        starfish.setTexture(Texture(Gdx.files.internal("starfish.png")) );
        starfish.setPosition( 380F,380F );
        mainStage.addActor( starfish );

        turtle = Turtle()
        turtle.setTexture( Texture(Gdx.files.internal("turtle-1.png")) )
        turtle.setPosition( 20F,20F )
        mainStage.addActor( turtle )

        winMessage = ActorBeta();
        winMessage.setTexture( Texture(Gdx.files.internal("you-win.png")) );
        winMessage.setPosition( 180F,180F );
        winMessage.setVisible( false );
        mainStage.addActor( winMessage );
        win = false }

    override fun update(dt: Float) {
        if (turtle.overlaps(starfish as ActorBeta)){
            starfish.remove()
            winMessage.setVisible(true)} }
}
abstract class GameBeta: Game() {
    protected var mainStage: Stage=null
   
 abstract  fun initialize()
    
override fun create() {`
        mainStage = Stage()
        initialize() }

    abstract  fun update(dt:Float)
    .
    override fun render() {
        var dt= Gdx.graphics.getDeltaTime()
        mainStage.act()
        update(dt)  
        Gdx.gl.glClearColor(0F,0F,0F,1F)
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
        mainStage.draw()
    }
}









 

1 Ответ

0 голосов
/ 14 июля 2020

Наследие StarfishCollector3 заключается в том, что он расширяет GameBeta, который расширяет Game, который реализует ApplicationListener.

В DesktopLauncher вы создаете экземпляр StarfishCollector3 и передаете его как неявный ApplicationListener в конструктор приложения, вызывая что-то вроде new LwjglApplication(starfishCollectior, config);. Когда вы создаете экземпляр этого LwjglApplication (или Lwjgl3Application или AndroidApplication, et c. В зависимости от серверной части), конструктор этого класса Application настраивает игровой движок. Он создает все классы для управления OpenGL и рисования игры в повторяющемся l oop, с паузой и возобновлением, et c.

Таким образом, класс Application использует ваш StarfishCollector3 в качестве ApplicationListener и вызывает его соответствующие методы жизненного цикла в подходящее время.

...