phaser js加载函数

时间:2015-05-12 11:10:02

标签: javascript typescript phaser-framework

我刚刚开始使用phaser JS进行游戏开发,但遇到了一个奇怪的问题,我需要一些帮助。

让我展示我的代码并解释出现问题的地方:

class SimpleGame {
    game: Phaser.Game;
    csvTM: string;
    
    constructor (csvTM: string) {

        this.csvTM = csvTM;

        this.game = new Phaser.Game(800, 600, Phaser.AUTO, 'content', { preload: this.preload, create: this.create });
    }

    test() {
        console.log("map test: " + this.csvTM);
    }

    preload() {
        console.log("map preload: " + this.csvTM);
        this.game.load.image('logo', 'empty_room.png');
        this.game.load.tilemap("ItsTheMap", this.csvTM, null, Phaser.Tilemap.CSV);
        this.game.load.image("Tiles", "concrete.png");
    }

    create() {
        console.log("map create: " + this.csvTM);
        var map = this.game.add.tilemap('ItsTheMap', 32, 32);
        map.addTilesetImage("Tiles");
        var layer = map.createLayer(0);
        layer.resizeWorld();

    }

}

现在我要做的就是将csv文件路径传递给SimpleGame对象的构造函数。当只使用绝对路径时,一切正常,我能够看到网格等。当我尝试使用变量时,问题出现了。注意我有三个日志语句都显示csvTM变量的内容。现在我首先要做的是:

var game = new SimpleGame(msg["Commands"][0][1]);
            game.test();

加载新的phaser对象并将文件路径传递给构造函数。现在我100%确定本地变量csvTM设置是因为当我做game.test()时我看到了文件路径。但是在preload和create中,csvTM始终是未定义的。因此破坏了我的代码。我注意到,在构造函数中创建的游戏对象似乎也可以工作,并且始终是定义的。

有人知道为什么我的局部变量字符串在preload中是未定义的并且在游戏局部变量似乎被定义的时候创建了吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我很难确定这一点,因为我无法访问您的所有代码。但我认为这可能是经典的javascript"这个"问题

尝试将方法定义为:

preload = () =>  { ... }
create = () =>  { ... }

这将确保"这个"函数内部实际上是正确的"版本" "这"。

关于"这个"有很多问题(和答案)。在stackoverflow上使用typescript / javascript,但我对之前类似问题的回答可能解释了为什么会出现这种行为:Visual Studio shows wrong value for `this` in TypeScript

编辑:

作为Marwane K.A.在他对我的回答的评论中指出,问题可以通过替换

来解决
{ preload: this.preload, create: this.create }

在"这"

的启动中