Можем ли мы использовать класс как метод - PullRequest
1 голос
/ 04 августа 2020

Я анализирую игровой проект. У основного класса проекта есть метод инициализации. В проекте используется класс с методом конструктора. Как называется этот подход? Каковы его логики c?

Например

Это основной класс

class LevelScreen : BaseScreen(){
override fun initialize() {
        Parallax(0f, 0f, mainStage, "assets/mountains0.png", 35f)
        Parallax(800f, 0f, mainStage, "assets/mountains1.png", 45f)}
}

Это называется класс Parallax

class Parallax(x: Float, y: Float, s: Stage, texture: String, speed: Float): BaseActor(x, y, s) {


    init {
        loadTexture(texture)
        setSpeed(speed)
        setMotionAngle(180f)
    }

    override fun act(dt: Float) {
        super.act(dt)
        applyPhysics(dt)

        // if moved completely past left edge of the screen
        // shift right, past other instance
        if (x + width < 0)
            moveBy(2 * width, 0f)
    }
}  

Ответы [ 2 ]

2 голосов
/ 05 августа 2020

Я пока не могу публиковать комментарии, так что рассмотрите возможность расширения ответа @ Bruno.

Похоже, вы запутались с классом Parallax. В Kotlin первичные конструкторы находятся отдельно от заголовка класса. Таким образом, class Parallax(x: Float, y: Float, s: Stage, texture: String, speed: Float): BaseActor(x, y, s) в Kotlin будет эквивалентно следующему в Java:

class Parallax extends BaseActor {
    Parallax(float x, float y, Stage s, String texture, float speed){
        super(x, y, s);
    }
}

Итак, когда Parallax вызывается дважды в initialize из LevelScreen, это фактически вызывает конструктор дважды (и, таким образом, создается 2 новых объекта).

Подробнее о конструкторах в Kotlin здесь: https://kotlinlang.org/docs/reference/classes.html#constructors

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

Проект не использует класс как функцию. Фактически, он создает экземпляры двух объектов, никуда не сохраняя их. Для каждого объекта будет выполнен код блока init {}

...