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

#javascript #logic #phaser-framework #calculation

#javascript #Логические #phaser-framework #вычисление

Вопрос:

Я делаю учебное пособие по Phaser 3 (javascript framework для создания 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!

Ответ №1:

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