我是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/

10-12 14:10