Уменьшить масштаб камеры, сохраняя текст заблокированным — Фазер 3

#javascript #camera #zooming #game-development #phaser-framework

Вопрос:

Я создаю игру с мечом, в которой вам нужно собирать монеты, чтобы стать большим, и вы сражаетесь с людьми. Вот что у меня есть на данный момент: Игрок становится больше, когда он собирает монеты

Обратите внимание, как игрок становится больше по мере сбора монет. Через некоторое время вы становитесь настолько большими, что занимаете весь экран.

большой игрок

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

Это то, что у меня есть для камеры (в функции создания)

this.cameras.main.startFollow(this.mePlayer);

Я добавил эту строку кода перед этим: this.cameras.main.setZoom(0.5)

Теперь это выглядит так. Текст все меньше, и по какой-то причине мой фон TileSprite тоже ломается.

введите описание изображения здесь

Вот код для текста.

         //killcounter
        this.killCount = this.add.text(window.innerWidth / 1.5, 0, 'Kills: 0', {
            fontFamily: 'Georgia, "Goudy Bookletter 1911", Times, serif'
        }).setFontSize(40).setDepth(101);
        this.killCount.scrollFactorX = 0
        this.killCount.scrollFactorY = 0

        //player fpscounter
        this.playerCount = this.add.text(this.cameras.main.worldView.x*this.cameras.main.zoom, this.cameras.main.worldView.y*this.cameras.main.zoom, 'Players: 0'   "nFPS: 0", {
            fontFamily: 'Georgia, "Goudy Bookletter 1911", Times, serif'
        }).setFontSize(20).setDepth(101);
        this.playerCount.scrollFactorX = 0
        this.playerCount.scrollFactorY = 0
 

это код для моей камеры

 this.cameras.main.startFollow(this.mePlayer);
 

… и это код для моего фона

 //in create function
        this.background = this.add.tileSprite(0, 0, window.innerWidth, window.innerHeight, 'background').setOrigin(0).setScrollFactor(0, 0);
        this.background.fixedToCamera = true;

//in update function
 this.background.setTilePosition(this.cameras.main.scrollX, this.cameras.main.scrollY);
 

Есть ли способ сохранить текст заблокированным, чтобы при уменьшении масштаба камеры он оставался в том же положении?

Ответ №1:

Спасибо samme за помощь в решении этой проблемы.

В конце я создал еще одну камеру под названием UICamera.

Я использовал ignore функцию, чтобы игнорировать все игровые объекты на этой камере.

И я проигнорировал весь текст, миникарту, пользовательский интерфейс и фон tilesprite на основной камере.

Затем, чтобы уменьшить масштаб, я бы просто уменьшил масштаб основной камеры и отрегулировал масштаб TileSprite вручную.

См. http://phaser.io/examples/v3/view/camera/ignore