javascript - Typescript window.onload blir ikke kalt etter å ha lagt til requirejs for phaser-spill


Jeg prøver å lage et spill med Phaser og TypeScript. Jeg fulgte instruksjonene her, og det fungerte i begynnelsen. Problemene oppstod da jeg prøvde å modulere koden min ved å bruke AMD og RequireJS.

index.html

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Resonate</title>
    <link rel="stylesheet" href="app.css" type="text/css" />
    <script src="phaser.js"></script>
    <script src="http://requirejs.org/docs/release/2.1.20/minified/require.js" data-main="app"></script>
</head>
<body>
    <h1>RESONATE</h1>

    <div id="content"></div>
</body>
</html>

Spiller.ts

export class Player {

    color: string;

    constructor() {
        this.color = "#0000ff";
    }
}

app.ts

import player = require("Player");

class PhaserDemo {

    game: Phaser.Game;

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

    preload() {
        this.game.load.image('phaser_run', 'run.png');
    }

    create() {
        console.log("Before");
        var p = new player.Player();
        this.game.stage.backgroundColor = p.color;
    }
}

window.onload = () => {
    console.log("ONLOAD");
    var game = new PhaserDemo();
};

Nå når jeg laster det opp, blir aldri window.onload kalt, jeg prøvde å følge window.onload not calling function for Javascript-løsningen, men jeg får det ikke til å fungere i typescript.

Her er også den genererte Javascripten hvis du vil ta en titt https://gist.github.com/koreus7/06bee4a30d22bdc76d62

Svar #1

for JavaScript-løsningen, men jeg får det ikke til å fungere i TypeScript.

I utgangspunktet, hvis vinduet allerede er lastet, vil det å koble til window.onload ikke kalle den tilkoblede funksjonen.

Sjekk for document.readyState === "complete". Alternativt kan du bruke noe som jquery ready: https://api.jquery.com/ready/

Svar #2

Jeg tror det skyldes require.js-loaderen, det er uten at jeg eksplisitt vet det litt likt jspm system.js, og så trenger vi ikke å sørge for at vinduet er lastet fordi loaderen allerede har sørget for det.

Jeg fjernet nettopp window.onload, og det fungerte fint :)

Relaterte artikler