提问人:Neffer Barragan 提问时间:1/17/2023 最后编辑:winner_joinerNeffer Barragan 更新时间:1/17/2023 访问量:168
我可以从 DOM 触发 Phaser 3 事件吗?
Can I fire Phaser 3 events from DOM?
问:
我正在尝试从 DOM 触发 Phaser 3 事件,就像我在互联网上找到的这个示例一样:
“当你创建游戏时,游戏实例是可以访问的,你可以从这个实例访问你想要的场景中的所有内容,并执行类似的事情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()
获取:
未捕获的 TypeError:无法读取 undefined 的属性(读取“greeting”) 在 :1:7
答:
1赞
winner_joiner
1/17/2023
#1
有两个问题:
第一个问题是,场景的名称不是,这是构造函数的值。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>
评论
0赞
Neffer Barragan
1/17/2023
天哪,我不能相信这是一个错误的名字🤦🏻 ♂️好吧,多亏了你的解释,我在短时间内学到了很多东西。非常感谢。
0赞
winner_joiner
1/17/2023
@NefferBarragan 当然,我们一开始都犯过类似的错误,它会变得更好。:)顺便说一句:如果可能并且您的问题已解决,您能否通过单击赞成箭头旁边的复选标记来接受我的回答。提前致谢,玩得开心
0赞
Neffer Barragan
1/18/2023
对不起,我一读到你的答案就做了更改,忘记标记它。再次非常感谢你
上一个:如何从 div 中获取文本?
评论