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 :)