Как я могу изменить начальную ориентацию физического изображения, не затрагивая его физическое тело? - PullRequest
1 голос
/ 07 февраля 2020

Создание моей первой игры Phaser, используя v3. Это клон Астероидов, как учебный проект.

Я нарисовал свой собственный космический корабль, так что у меня есть png этого. Я еще не читал документы Фазера, меня не предупредили о правоте Фазера, и поэтому мой космический корабль направлен на север.

Теперь я сфотографировал это изображение как физическое тело аркады, и клавиши со стрелками управляют дросселем и рулем. Основная камера следует за PNG. Массовый успех ... за исключением того, что, когда игра загружается, космический корабль заметно указывает на север, но ускорение прямо "вперед" заставляет его скользить на восток (к вращению физики 0).

Я не хочу изменить мой образ. Я хочу узнать, как это использовать в Phaser, потому что это похоже на довольно простой элемент c в наборе инструментов: как настроить Phaser так, чтобы он получал активы, которые я умоляю, одалживаю или краду, как они есть.

Я надеюсь, что этого достаточно:

preload() {
    this.load.image('player.ship.facingNorth', 'assets/images/player/ship-facingNorth.png')
}

create() {
    // this image faces north (i.e. png angle = -90)
    this.player = this.physics.add.image(VW_50, VH_50, 'player.ship.facingNorth')

    // somehow tell phaser to rotate the image clockwise 90 degress

    // this.player.angle = 90 // rotates visible pixels AND physics orientation -- they stay inconsistent
    // this.player.body.angle = -90 // no effect
    // this.player.body.transform.angle = 90 // no effect
    // this.player.facing = 0.4 // no effect
    // this.player.body.facing = 0.4 // no effect
    // this.player.body.transform.facing = 0.4 // no effect
    // this.player.preRotation = 0.7 // no effect
    // this.player.body.preRotation = 0.7 // no effect
    // this.player.body.transform.preRotation = 0.7 // no effect

    this.cameras.main.startFollow(this.player, false, 0.1, 0.1, 0, 10)
    this.cursors = this.input.keyboard.createCursorKeys()
}

update(time, delta) {
    // ... cursor keys logic

    const thrust = 100

    if (this.rudder !== 0) {
        this.player.rotation += this.rudder
    }

    this.physics.velocityFromRotation(this.player.rotation, thrust, this.player.body.velocity)
}

Я посмотрел документы для Physics.Arcade.Body , Physics.Arcade.Image , и Phaser.GameObjects.GameObject . Это все, что я мог бы попробовать.

Можно ли как-нибудь использовать изображение, ориентированное на север, и совместить видимые графики c с управляемой физикой скоростью?

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

Любая помощь приветствуется.

...