Почему мой скрипт фазера не выводит карту, которую я создал?

Вот мой код: https://replit.com/@JackF99/test-2d-array (Ошибка в script.js)

Этот код должен вывести экран игры с картой.

let mapArr;
let drawX=0;
let drawY=0;
//map is declared as variable in map.js
class gameScene extends Phaser.Scene {
    //Constructor with config var declared at bottom
    constructor(config) {
        super(config);
    }
    //Preload aspects for gameScene 
    preload() {
        //Preloading images
        this.load.atlas("player", "assets/temp.png");
        this.load.image("spike", "assets/spike.png");

        this.load.image("floor", "assets/floor.png");
        this.load.image("wallLeft", "assets/wallLeft.png");
        this.load.image("wallRight", "assets/wallRight.png");
        this.load.image("WallBottom", "assets/wallBottom.png");
        this.load.image("wallTop", "assets/wallTop.png");
        this.load.image("bg", "assets/bg.png");
    }
    //Create function for gameScene
    create() {
        this.floor = this.physics.add.staticGroup();
        this.wallTop = this.physics.add.staticGroup();
        this.wallBottom = this.physics.add.staticGroup();
        this.wallLeft = this.physics.add.staticGroup();
        this.wallRight = this.physics.add.staticGroup();
        this.bg = this.physics.add.staticGroup();
        //Splitting the map string by into array variables
        let mapArr = map.split('.');
        //For each loop goes through each row of mapArr
        mapArr.forEach(row => {
            //Setting pixel value X to 0 when its a new row
            drawX = 0;
            //Goes through each variable in the row and creates image in its place
            for (let i = 0; i < row.length; i++) {
                if (row.charAt(i) === '7') {
                    this.floor.create(drawX, drawY, "floor");
                } else if (row.charAt(i) === '9') {
                    this.wallTop.create(drawX, drawY, "wallTop");
                } else if (row.charAt(i) === '8') {
                    this.wallBottom.create(drawX, drawY, "wallBottom");
                } else if (row.charAt(i) === '5') {
                    this.wallLeft.create(drawX, drawY, "wallLeft");
                } else if (row.charAt(i) === '6') {
                    this.wallRight.create(drawX, drawY, "wallRight");
                } else if (row.charAt(i) === '1') {
                    this.floor.create(drawX, drawY, "floor");
                    //Creating player variables
                    //  this.player = this.add(drawX, drawY, "player");
                    // this.player.body.setGravityY(0);
                    // this.physics.add.collider(this.player, this.wallLeft);
                    //  this.physics.add.collider(this.player, this.wallRight);
                    //  this.physics.add.collider(this.player, this.wallTop);
                    //  this.physics.add.collider(this.player, this.wallBottom);
                    // this.cameras.main.startFollow(this.player);
                    // this.player.score = 0;
                    // this.scoreText = this.add.text(0, 0, "Score: "+this.player.score, {
                    //  fill:"#000000",
                    //  fontSize:"20px",
                    //  fontFamily:"Arial Black"
                    // }).setScrollFactor(0).setDepth(200);
                } else {
                    this.bg.create(drawX, drawY, "bg");
                }
                //Add 16 each time a image is added (16by16 pixel images)
                drawX += 16
            }
            //Add 16 each time a new row is entered (16by16 pixel images)
            drawY += 16;
        });
    }
    //update function for gameScene
    update() {

    }

}
//END OF GAME SCENES

//Var config to create game screen
var config = {
    type: Phaser.AUTO,
    width: 3000,
    height: 1500,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: {
                y: 0
            },
            debug: false
        }
    },
    scene: {
        preload: preload,
        create: create,
        update: update
    }
};

//Run actual game
var game = new Phaser.Game(config);
//Create new screens and scenes
game.scene.add("load", loadScene);
game.scene.add("game", mainScene);
game.scene.add("end", endScene);
//start with this scene
game.scene.start("game");

Я хотел вывести рандомизированное подземелье, созданное в формате 2D-массива и возвращенное в виде строки. Я хотел вывести его в виде изображений на основе значений в строке.

Мой ответ решил вашу проблему? я что-то пропустил? Если это так, пожалуйста, рассмотрите возможность принятия моего ответа.

winner_joiner 12.04.2023 06:02

Нет, это не сработало. В настоящее время я использую этот код, пусть config = { type: Phaser.AUTO, ... }, scene: { preload: preload, create: create, update: update } }; //Создаем фазерную игру const game = new Phaser.Game(config); function preload() {... Но я хотел бы использовать другой формат кода, если у вас есть идеи. Когда я попробовал ваше исправление, карта вообще не отображалась. Обновленный код находится по адресу replit.com/@JackF99/test-2d-array#script2.js.

JackF99 12.04.2023 18:57

Проблема может заключаться в том, что в кодовой версии могут отсутствовать функции preload, create и update, используемые в конфиге игры. Ознакомьтесь с обновленным ответом или официальными примерами

winner_joiner 12.04.2023 20:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Карта не отображается, потому что GameScene никогда не загружается. Для того, чтобы сделать его видимым, необходимы лишь некоторые незначительные изменения. Подробнее см. ниже.

    class GameScene extends Phaser.Scene {
        constructor(){
            // set the scene key name
            super('Game');
        }
        ...
    }
    ...
    // add the scene
    game.scene.add('Game', GameScene);
    // start the scene, this key should be the same of the `constructor`
    game.scene.start('Game');

Кстати: для карты в фазере вы можете использовать фазерную карту TileMap. ознакомьтесь с официальными руководствами, если вам интересно.

Лучшим решением может быть даже добавление всех сцен в объект config, например:

var config = {
    type: Phaser.AUTO,
    width: 3000,
    height: 1500,
    ...    
    scene: [loadScene, mainScene, endScene]
 };

Информация: Будет загружена первая Сцена в списке, остальные сцены запускаются только если в их конфиге свойство active установлено в true. Подробности в документации GameConfig.

Не могли бы вы проверить мой новый пост? Я использую формат, который мой учитель недавно показал нам, но он не сработает. stackoverflow.com/questions/76185874/…

JackF99 05.05.2023 23:02

Другие вопросы по теме