我是Phaser 3开发人员的初学者,我正在尝试为我的所有游戏定义一个好的模式。我找到了很多很棒的一页教程,但是当我在ES6类系统中翻译它们时,我遇到了范围问题(在create()中定义的元素在更新中不可见)的困难。
我已经看到没有ES6类的一种常见模式是将方法添加到游戏配置对象的scene属性中,如下所示:
scene: {
preload: preload,
create: create,
update : update
}
现在这是我的问题。如果我有此代码:
window.onload = function() {
const config = {
width: 1136,
height: 640,
backgroundColor: "#ECF0F1",
scene: bootGame
}
jeu = new Phaser.Game(config);
class bootGame extends Phaser.Scene{
constructor(){
super("BootGame");
}
preload(){}
create(){
let cursors = this.input.keyboard.createCursorKeys();
}
update(){
if (cursors.left.isDown){// cursors not defined}
}
}
我应该怎么写才能在update()中定义“游标”?
非常感谢您的帮助!
PS:我已经看到了问题Phaser + Typescript losing scope in update,但是它的Typescript +导入模块语法让我迷失了方向。
最佳答案
bootGame
是类,在类中this
引用该类。因此,您需要创建this.cursors
,使其成为该类的属性,并且同一类中的每个方法(函数)都可以通过this.cursors
访问该属性。
当使用let
定义变量时,其作用域仅限于在其中定义的块。在这里,您已经在cursors
函数中定义了create
,因此无法在create
函数外部访问它。
关于javascript - Phaser3 + ES6类:如何保持范围从创建到更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54686215/