Я пытаюсь запустить событие Phaser 3 из DOM, как я читал в этом примере, который я нашел в Интернете:
"Экземпляр игры доступен при создании игры с чем-то вроде
const game = new Phaser.Game(config);
И вы можете получить доступ ко всему из желаемой сцены из этого экземпляра.
const scene = game.scene.keys.sceneName
И сделать что-то вроде
textareaElement.addEventListener("change", function(event) {
const text = textareaElement.value;
scene.updateGameTextFromTextarea(text);
});
Это конфигурация моего проекта:
const config = {
// Phaser.AUTO, intenta usar WebGL y si el navegador no lo tiene, usa canva.
type: Phaser.AUTO,
parent: 'game-container',
width: 650,
height: 522,
scene: [MainScene],
scale: {
mode: Phaser.Scale.FIT
},
dom: {
createContainer: true
},
physics: {
default: 'arcade',
arcade: {
// debug: true,
// gravity: { y: 350 }
}
}
}
// Inicializacion del objeto
game = new Phaser.Game(config)`
Я действительно могу получить доступ к игре с консоли, но не могу запускать события.
const scene = game.scene.keys.MainScene
scene.greeting()
получать:
Uncaught TypeError: не удается прочитать свойства неопределенного (чтение «приветствие») в :1:7
Есть две проблемы:
Первая проблема заключается в том, что имя сцены gameScene
, а не MainScene
, это значение из конструктора.
Вторая проблема заключается в том, что экземпляр сцены/игры не заполняется сразу, вам придется немного подождать. Я смоделировал это в демонстрации с помощью setTimeout
, или вы также можете щелкнуть Button
, чтобы вызвать ту же функцию из сцены.
Вот короткая демонстрация:
document.body.style = 'margin:0;';
class MainScene extends Phaser.Scene {
constructor(){
super('gameScene');
}
test(){
console.info('Hello From Scene');
}
}
var config = {
type: Phaser.AUTO,
width: 536,
height: 183,
physics: {
default: 'arcade',
arcade: {
gravity:{ y: 100 },
debug: true
}
},
scene: [ MainScene ],
banner: false
};
var game = new Phaser.Game(config);
setTimeout( () => game.scene.keys.gameScene.test(), 1000); // Wait for generation
document.querySelector('button').addEventListener('click', () => game.scene.keys.gameScene.test())
<script src = "//cdn.jsdelivr.net/npm/[email protected]/dist/phaser.js"></script>
<button id = "button"> Fire from the DOM </button><br>
@NefferBarragan Конечно, мы все делали одинаковые ошибки в начале, дальше будет лучше. :) Кстати: если возможно, и ваш вопрос решен, не могли бы вы принять мой ответ, нажав на галочку рядом со стрелками вверх. Заранее спасибо и получайте удовольствие от фазера
Извините, я внес изменение, как только прочитал ваш ответ, и забыл его отметить. Большое спасибо еще раз
О боже, не могу поверить, что это было неправильное имя 🤦🏻♂️ Ну, я многому научился за короткое время благодаря вашему объяснению. Большое спасибо.