Физика фазерной АРКАДЫ не работает, когда я добавляю эту строку.физика

#javascript #physics #phaser

Вопрос:

Я новичок в Phaser и попытался создать в нем игру.
Для добавления физики я следовал phaser.io учебник по физике.
Это мой код 👇

 <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    body {
        margin: 0;
        padding: 0
    }

    canvas {
        width: 100%
    }
</style>

<body>
    <!-- <script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.min.js"></script> -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/phaser/3.60.0-beta.3/phaser-arcade-physics.js"></script>
    <script>

        let config={
            type: Phaser.AUTO,
            width: 1000,
            height: 500,
            backgroundColor: '#2bff00',
            physics: {
                default: 'matter',
                arcade: {
                    gravity: {y: 0},
                    debug: true
                }
            },
            scene: {
                preload: preload,
                create: create,
                update: update
            }
        }
        let game = new Phaser.Game(config);

        let enemy1dir = 1, enemy2dir = 2, enemy3dir = 3, enemy4dir = 4, enemy5dir = 5;
        function preload() {
            this.load.image('player', 'boydoctor.png');
            this.load.image('enemy', 'coronavirus.png');
        }
        let player, enemy1, enemy2, enemy3, enemy4, enemy5;
        function create() {

            this.physics.world.setBounds(0,0, 1000, 500);

            this.player = this.add.sprite(50, 250, 'player');
            this.player.setScale(.2, .2);
            this.enemy1 = this.add.sprite(150, 50, 'enemy');
            this.enemy1.setScale(.05, .05);
            this.enemy2 = this.add.sprite(300, 50, 'enemy');
            this.enemy2.setScale(.05, .05);
            this.enemy3 = this.add.sprite(450, 50, 'enemy');
            this.enemy3.setScale(.05, .05);
            this.enemy4 = this.add.sprite(600, 50, 'enemy');
            this.enemy4.setScale(.05, .05);
            this.enemy5 = this.add.sprite(750, 50, 'enemy');
            this.enemy5.setScale(.05, .05);
        }
        function update() {
            let height = this.sys.game.config.height;
            if (this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP).isDown)
                this.player.y -= 2;
            if (this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN).isDown)
                this.player.y  = 2;
            if (this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT).isDown)
                this.player.x -= 2;
            if (this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT).isDown)
                this.player.x  = 2;

            if (this.enemy1.y > height - 50)
                enemy1dir = -1;
            else if (this.enemy1.y < 50)
                enemy1dir = 1;

            if (this.enemy2.y > height - 50)
                enemy2dir = -2;
            else if (this.enemy2.y < 50)
                enemy2dir = 2;

            if (this.enemy3.y > height - 50)
                enemy3dir = -3;
            else if (this.enemy3.y < 50)
                enemy3dir = 3;

            if (this.enemy4.y > height - 50)
                enemy4dir = -4;
            else if (this.enemy4.y < 50)
                enemy4dir = 4;

            if (this.enemy5.y > height - 50)
                enemy5dir = -5;
            else if (this.enemy5.y < 50)
                enemy5dir = 5;

            this.enemy1.y  = enemy1dir;
            this.enemy2.y  = enemy2dir;
            this.enemy3.y  = enemy3dir;
            this.enemy4.y  = enemy4dir;
            this.enemy5.y  = enemy5dir;
        }
    </script>
</body>

</html> 

В этом случае, когда я добавляю this.physics.world.setBounds(0,0, 1000, 500); строку, возникает ошибка, но когда я ее удаляю, она работает правильно. Если этот метод неверен, то какой метод я должен использовать, чтобы добавить в игру аркадную физику?

Ответ №1:

Я не уверен, имеет ли это большое значение или нет, но я заметил в вашей конфигурации, что по умолчанию у вас есть «материя», но вы хотите использовать «аркаду». Возможно, изменение значения по умолчанию на «аркада» может помочь.

Комментарии:

1. Да, была еще одна ошибка. Твое предложение сработало. Спасибо, что помогли этому нубу в фазе 3. 🙏