Я недавно начал экспериментировать с TypeScript, JavaScript и Phaser3.Мой код TypeScript переносится в один файл JavaScript (с использованием системы) в виде модулей.Я использую событие window.onload, чтобы запустить мой код, все это работало нормально, пока я использовал пространства имен.После того, как нужно было добавить оператор импорта (импорт стороннего плагина), все сломалось.После этого я переключился с пространств имен на модули (добавил импорт / экспорт + удаленные пространства имен).И, очевидно, это также означает, что мои модули упакованы в блоки системного реестра, поэтому «глобальный» код (часть window.onload) не выполняется при загрузке.=> Проект не запускается ...: (*
Вопрос: Как я могу запустить мой код сейчас? (Я уже искал / пробовал несколько вещей, но мои знания web / html / javascriptне достаточно глубоко, чтобы понять точную проблему, я думаю).
Вы можете найти источник здесь . (VSCode) Он также содержит сервер> Начать отладку (Launch Program), просмотритена локальный хост: 1234.
КОД:
index.html
<!DOCTYPE html>
<html>
<head>
<title>Phaser3 - Hello World</title>
<meta charset="utf-8" />
<script type="text/javascript" src="js/system.js"></script>
<script type="text/javascript" src="js/phaser.js"></script>
<script src="js/nineslice.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script>
</script>
</head>
<body>
<div id="phaser-app"></div>
</body>
</html>
Boot.ts
import { BootConfig } from "./MainScene";
//namespace HelloPhaser
//{
window.onload = () => {
BootConfig.runApp();
}
//}
MainScene.ts
import { Plugin as NineSlicePlugin } from 'phaser3-nineslice'
//namespace HelloPhaser
//{
export class BootConfig
{
static runApp()
{
var game = new Phaser.Game({
title: "Hello Phaser 3",
width: 600,
height: 960,
type: Phaser.AUTO,
parent: "phaser-app",
plugins: {
global: [NineSlicePlugin.DefaultCfg]
},
physics: {
default: "arcade",
arcade: {
gravity: {
y: 0
},
debug: true
}
},
scale: {
mode: Phaser.Scale.FIT,
autoCenter: Phaser.Scale.CENTER_BOTH
},
scene: MainScene
});
}
}
export class MainScene extends Phaser.Scene
{
constructor()
{
super({key:"MAIN", active:true})
}
create()
{
this.add.text(0, 0, "HELLO PHASER 3");
}
}
//}
tsconfig.json
{
"compileOnSave": true,
"compilerOptions": {
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "system", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"outFile": "bin/js/app.js", /* Concatenate and emit output to single file. */
"outDir": "bin/js", /* Redirect output structure to the directory. */
"removeComments": true, /* Do not emit comments to output. */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
},
"include": [
"./src/**/*"
],
"files": [
"./tsDefinitions/nineslice.d.ts",
"./tsDefinitions/phaser.d.ts"
]
}
Небольшое резюме: - Код прекрасно работает с пространствами имен + без обязательного импорта для плагина nineslice - После добавления импорта BootConfig не был определен для Boot.ts. После добавления экспорта / импорта были найдены типы. НО> my window.onload didn 'выполнить (потому что теперь это модуль ..)
Как мне сохранить текущие настройки модуля, но запустить игру? (что означает выполнение кода в BootConfig.runApp ())