2

だから、実際には大きな問題を引き起こさないはずの基本的なTypescriptアプリケーションを手に入れましたが、ここで何かがうまくいかないようで、何がわかりません。

クラスにこのプライベートメンバーminUpdateRateがあり、コンストラクターで初期化されます。が呼び出されると、メソッドが出力されるGameContainerため、これはうまくいくようです。GameContainer.start()console.log()1

ただ、GameContainer.render()メソッドを呼び出すと範囲外のようで、undefinedそこにログメソッドが出力されます。

私は TypeScript を初めて使用し、JavaScript についてもそれほど深くは知りません (特にスコープに関しては、私は混乱しています :/)。しかし、どうすればこれを解決できますか?

メインクラス:

class TwoDGame extends Game {
    public static main(context:CanvasRenderingContext2D) {
        var game:Game = new TwoDGame();
        var container:GameContainer = new GameContainer(context, game);

        container.start();

        return game;
    }
}

ゲーム コンテナ クラス:

class GameContainer {
    ...
    private minUpdateRate:number;
    private game:Game;
    private time:number;
    ...

    constructor(context:CanvasRenderingContext2D, game:Game) {
        ...
        this.minUpdateRate = 1;
        this.game = game;
    }

    public start() {
        ...
        console.log(this.minUpdateRate);
    }

    public render() {
        var now:number = new Date().getMilliseconds();
        var delta:number = now - this.time;
        console.log(this.minUpdateRate);

        if (delta > this.minUpdateRate) {
            ...
        }
    }
}

Render は、スクリプト領域の setInterval を介して呼び出されます。

var game = TwoDGame.main(context);

setInterval(game.getGameContainer().render, 16);
4

1 に答える 1