【问题标题】:Call Another JavaScript File Directly?直接调用另一个 JavaScript 文件?
【发布时间】:2018-10-22 00:00:37
【问题描述】:

注意:其他答案似乎不起作用,因为我不想仅仅从另一个文件导入或使用 function

我需要知道是否有任何方法可以在任何地方放置一些东西来告诉另一个 JS 文件运行。还有整个文件。

我是 JavaScript 新手,我试图避免使用 NodeJS 和 jQuery 之类的东西,以便对 JS 有更好的理解,所以我尝试制作一些简单的程序。

我做了一个小游戏,但我想加入另一个关卡。我尝试这样做,以便一旦在某个区域检测到碰撞,它将设置一个布尔值,确定关卡是否仍在运行为假。然后我做了一个while循环,如果它是真的,它会更新游戏。问题是,正如我从本网站上的其他问题中了解到的那样,这不起作用。它使整个事情崩溃。所以我想如果我可以回到我原来的游戏循环,但把另一个关卡放在文件中,我可以调用那个文件,让它基本上成为一个单独的游戏。

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

【问题讨论】:

  • 我觉得你对javascript的理解还不够。您不运行文件,可能是从另一个文件调用函数。如果您花更多时间描述问题并创建minimal, complete and verifiable 示例,这将有所帮助。欢迎使用 StackOverflow
  • @VannTileIanito 在网站上已经有一段时间了,只是不经常提问或发布答案。当然我的理解是不够的,我刚开始学习,只是寻求帮助。我的主要意思是 NielsNet 从中得到了什么。
  • <script src="myFile.js"></script> ?这运行 myFile.js
  • 动态与document.createElement('script');

标签: javascript html canvas html5-canvas


【解决方案1】:

我将稍微阅读您的问题,以便为您提供我认为更好的答案。本质上,您希望通过加载新的 .js 文件并停止使用另一个文件来更改玩家所在的级别。

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

你还没有发布任何代码,所以我不能真正给你一个适合你的例子,但我会给出一个通用的。

  1. 最简单(但最糟糕)的做法是将播放器重定向到“level2.html”。我刚开始编写游戏时就这样做了,所以它应该适合您的学习目的。
if (gameOn == false) {
  location.href = "level2.html";
}

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

  1. 最好(但更困难)的方法是用新的数据结构替换您拥有的任何指示级别的数据结构。

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

请随时提出任何问题。

【讨论】:

    【解决方案2】:

    您可能对importexport 感兴趣。

    这是一个很大的话题,但总结起来你需要三个基本的东西:

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

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

    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 中不起作用,我怀疑点在其他浏览器中会受到伤害。这也意味着你可以有一个文件夹结构,例如:
      游戏
        -> 图像
        -> js
          -> 来源
            index.js
          -> 级别
            level1.js
        -> CSS
      
      并参考来自index.jslike ../levels/level1.js 的级别

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多