Как работать с методом, который не вызывается в проекте libgdx - PullRequest
0 голосов
/ 04 августа 2020

Я анализирую код игры. Метод с именем act () запущен, хотя он не вызывается. Похоже, есть секретный метод, но я его не вижу. Я слежу за источником метода. Я нахожу такой код. Некоторая часть кодов приведена ниже. Я думаю, что родительский класс отправляет метод дочернему классу при выполнении нового объекта. Есть ли название этого подхода.

Это класс LevelScreen. У него нет метода act (), но метод act () работает. Я вижу изменения, когда меняю параметры в методе act () в классе Plane.

class LevelScreen : BaseScreen(){
 plane = Plane(100f, 500f, mainStage)}

Это класс Plane, у которого есть метод act ().

class Plane(x: Float, y: Float, s: Stage) : BaseActor(x, y, s){
    override fun act(dt: Float)  {
            super.act(dt)
    
            // simulate force of gravity
            setAcceleration(800f)
            accelerateAtAngle(270f)
            applyPhysics(dt)
    ................
    .............
    
    }

Это родительский класс класса Plane

open class BaseActor(x: Float, y: Float, s: Stage) : Group(){
override fun act(dt: Float) {
        super.act(dt)

        if (!animationPaused)
            elapsedTime += dt
    }


}

Это это класс, который находится в рамках libGDX

public class Group extends Actor implements Cullable{
public void act (float delta) {
        super.act(delta);
        Actor[] actors = children.begin();
        for (int i = 0, n = children.size; i < n; i++)
            actors[i].act(delta);
        children.end();
    }

}

1 Ответ

0 голосов
/ 04 августа 2020

Посмотрите на главный файл проекта, в котором создается Stage . В основном файле будет метод под названием render , и именно здесь метод act вызывается в первый раз. Все Актеры добавляются в Сцену, а затем внутри метода рендеринга вызывается метод act на Сцене, который затем вызывает метод act для всех Актеров, которые он содержит.

Это раздел, в котором вы находитесь ищу (взято из одного из моих проектов):

@Override
public void render (){
    Gdx.gl.glClearColor(0.6f, 0.64f, 0.7f, 1.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(Gdx.graphics.getRawDeltaTime());      // START OF ACT METHODS
    stage.draw();
}
...