将模块脚本重写为JavaScript中的经典脚本

时间:2018-09-07 04:16:21

标签: javascript html5 module html5-canvas

我使用JavaScript中的模块脚本开发了一个游戏。基本上在我的代码中导入和导出语句。该游戏仅在运行本地服务器时可用,但我希望它可以通过index.html获得。如果我使用index.html打开它,则会抛出

  

CORS策略已阻止从原始“ null”的路径访问脚本:无效响应。因此,不允许访问原始“空”。

<!DOCTYPE html>
<html>
<head>
<title>My Game</title>
<style>
    body{
        margin: 0;
        height: 100%;
        width: 100%;
    }
    #screen {
        display: block;
        height: 100vh;
        width: 100vw;
        margin: 0;
        image-rendering: pixelated;
    }
</style>
<script type="module" src="js/main.js"></script>
</head>
<body>
   <canvas id="screen" width="250" height="330"></canvas>
</body>
</html>

我认为我需要将JS脚本重写为经典脚本。

  

Main.js

import Camera from './Camera.js';
import Entity from './Entity.js';
import PlayerController from './traits/PlayerController.js';
import Timer from './Timer.js';
import { loadFont } from './loaders/font.js';
import { loadEntities } from './entities.js';  
import { createLevelLoader, createRandomEntity } from './loaders/level.js';
import { setupKeyboard } from './input.js';
import { createCollisionLayer } from './layers/collision.js';
import { createDashboardLayer } from './layers/dashboard.js';
import { createGameOverLayer } from './layers/gameover.js';

function createPlayerEnv(playerEntity) {
   const playerEnv = new Entity();
   const playerControl = new PlayerController();
   playerControl.checkpoint.set(64, 64);
   playerControl.setPlayer(playerEntity);
   playerEnv.addTrait(playerControl);
   return playerEnv;
 }

 async function main(canvas) {
 const context = canvas.getContext('2d');

  const [entityFactory, font] = await Promise.all([loadEntities(), loadFont()]);

 const loadLevel = await createLevelLoader(entityFactory);

 const level = await loadLevel('level');

const camera = new Camera();

const user = entityFactory.user();

const playerEnv = new createPlayerEnv(user);
level.entities.add(playerEnv);

//Bounding Box:
level.comp.layers.push(createCollisionLayer(level));
level.comp.layers.push(createDashboardLayer(font, playerEnv));

timer.start();
}

const canvas = document.getElementById('screen');
main(canvas);
  

带导出的脚本

import Keyboard from './KeyboardState.js';

export function setupKeyboard(pacman) {
const input = new Keyboard();

input.addMapping('KeyP', keyState => {
    if (keyState) {
        pacman.jump.start();
    } else {
        pacman.jump.cancel();
    }
});

input.addMapping('KeyO', keyState => {
    pacman.turbo(keyState);
});

input.addMapping('KeyD', keyState => {
    pacman.go.dir += keyState ? 1 : -1;
});

input.addMapping('KeyA', keyState => {
    pacman.go.dir += keyState ? -1 : 1;
});

return input;
}

您能否提供一个有关如何将模块脚本重写为经典脚本的示例?谢谢!

0 个答案:

没有答案