直接调用另一个JavaScript文件吗?

时间:2018-08-03 16:24:47

标签: javascript html html5 canvas html5-canvas

注意:其他答案似乎无效,因为我不想从其他文件导入或使用功能

我需要知道是否有什么方法可以在可以告诉其他JS文件运行的地方放置任何内容。和整个文件。

我是JavaScript的新手,我正尝试避免使用NodeJS和jQuery之类的东西,以便对JS有更好的了解,因此我尝试编写一些简单的程序。

我做了一个小游戏,但是我想再提高一个水平。我尝试这样做,以便一旦在特定区域中检测到碰撞,它将设置一个布尔值,该布尔值确定级别是否仍在运行至false。然后我做了一个while循环,说如果它是对的,它将更新游戏。问题是,正如我从该站点上的其他问题中学到的那样,这无法正常工作。它使整个事情崩溃。所以我认为,如果我可以回到以前的游戏循环,但将另一个级别放到文件中,则可以调用该文件并将其基本上是一个单独的游戏。

TL; DR:我需要知道如何停止运行一个文件并转到JS中的另一个文件,或者至少将用户重定向到单独的URL,以便可以将级别放置在单独的站点中。

2 个答案:

答案 0 :(得分:0)

我将稍微阅读一下您的问题,以便为您提供我认为是更好的答案。本质上,您想通过加载新的.js文件并停止使用另一个文件来更改播放器的级别。

多个文件成为解释器的“一个大文件” ,这意味着将级别放入单独的文件仅出于组织目的-除非您有多个页面,每个页面使用不同的“ level.js”文件。

您尚未发布任何代码,因此我无法真正为您提供量身定制的示例,但我将提供一个通用示例。

  1. 最简单(但最糟糕)的做法是将播放器重定向到“ level2.html”。刚开始编程游戏时就这样做了,因此对于您的学习目的应该没问题。
if (gameOn == false) {
  location.href = "level2.html";
}

然后在level2.html中,您将拥有一个不同的<script>,它可以与您的所有其他游戏代码一起运行2级。

  1. 执行此操作的最佳方法(但更困难)是用新的数据结构替换您决定该级别的任何数据结构。

例如:如果您有一个存储一堆gameObjects的数组,则可以将其替换为“ level2”数组。

随时问任何问题。

答案 1 :(得分:0)

您可能对importexport感兴趣。

这是一个很大的主题,但总结起来,您需要三件事:

  1. 一个脚本标记,引用了程序的入口点,通常为index.js,该入口点应特别具有type="module"属性,例如<script type="module" src="./index.js"></script>

  2. 主要入口点脚本/模块本身,例如index.js,它应该具有一个或多个import语句

  3. 一个或多个文件要导入到您的主模块中,例如level1.jslevel2.js等。


总的来说,可能看起来像这样:

// html
<script type="module" src="./index.js"></script>

(请参阅注释1)

// index.js
// do all game stuff here
import level1 from './level1.js';
import level2 from './level2.js';
// etc.

...

// do something with level1, level2, etc.


// level1.js
export default {
    someList: [], // ?
    someProperties: {}, // ?
}

// OR ( but be sure there's only one export statement )
export default function () {
    // do it, run the level!
}

注释

  1. 我使用相对路径./来引用当前所有文件夹。我看到的示例仅包含一个正斜杠,没有点,但是我知道这在Chrome浏览器中不起作用,并且我怀疑该点在其他浏览器中是否有用。这也意味着您可以拥有一个文件夹结构,例如:
    game
      -> images
      -> js
        -> source
          index.js
        -> levels
          level1.js
      -> css
    
    并像index.js一样引用../levels/level1.js中的某个级别