Как Phaser 3 каждый раз вычисляет позицию по оси y над платформами?

Я делаю учебник по Phaser 3 (фреймворк javascript для создания 2D- и 3D-игр), и мне интересно узнать, как Phaser 3 обрабатывает позицию y из этого простого вычисления:

    /**
     * @param {Phaser.GameObjects.Sprite} Sprite
     */
    addCarrotAbove(sprite)
     {
        // this one!!!!!
        const y = sprite.y - sprite.displayHeight

        /** @type {Phaser.Physics.Arcade.Sprite} */
        const carrot = this.carrots.get(sprite.x, y, 'carrot')

        this.add.existing(carrot)

        carrot.body.setSize(carrot.width, carrot.height)

        return carrot
    }

и при разборе другого объекта этой функции, которая вместо спрайта представляет собой автоматическую переработку платформы, которую я написал/итерация:

```update(t, dt)
    {
        this.platforms.children.iterate(child => {
            /** @type {Phaser.Physics.Arcade.Sprite} */
            const platform = child

            const scrollY = this.cameras.main.scrollY
            if (platform.y >= scrollY + 600)
            {
                platform.y = scrollY - 60
                platform.body.updateFromGameObject()

                // create a carrot above the platform being reused
                this.addCarrotAbove(platform)
            }
        })```

он автоматически размещает морковь поверх платформ (при выполнении функции)

Как это делается? Единственная интересующая меня строка — это переменная y, которую я создал с помощью const. Положение морковки вычисляется с помощью этого простого расчета, но я не могу понять, как он каждый раз ставит морковь на вершину платформы. Спасибо сообществу stackoverflow!


person vladbx6    schedule 23.09.2020    source источник


Ответы (1)


Ничего себе, я разобрался. Для тех, у кого есть такая же проблема, но не может, написанная мной функция платформы утилизации использует прокрутку камеры для отправки платформ вверх, и это дает координате Y отрицательное значение. Чтобы морковь появилась не внутри платформы (что было бы sprite.y), а над платформой, вы ВЫЧИТАЕТЕ высоту отображения спрайта, а не добавляете два, потому что sprite.y является отрицательным значением, и, вычитая его, вы отправка морковки вверх на количество пикселей на высоту дисплея. Надеюсь, я помог.

person vladbx6    schedule 23.09.2020