1

我是一位经验丰富的 javascript 程序员,我正在尝试从头开始编写自己的模块化游戏引擎。我以前没有使用过requirejs,但是在阅读了一些内容之后,听起来它可能是管理引擎所有组件并将它们加载到一个连贯结构中的最佳方式。

我的主要问题是我不确定如何真正使用requirejs。我一直在查看他们的 API 文档,但我不确定如何将它与我的项目布局方式集成。

目前,我的项目使用以下结构:

  • 源代码
    • engine.js //这包含通用引擎的东西,最显着的引擎命名空间
    • 资源
      • resource-module.js //这是模块构造函数,它处理不同子结构之间的所有常见东西
      • sprites.js //这是一个包含精灵加载代码的子结构
    • 使成为
    • ETC...
    • 第三者
      • jQuery
      • 需要js

我希望能够彼此独立地加载模块。例如,应该可以从引擎中移除音频模块,它仍然可以工作。替换模块或添加新模块也应该很容易。

另外,我使用 jQuery 进行事件处理,因此需要在引擎启动之前加载它。

你可以在这里找到我当前的来源:https ://github.com/superlinkx/lithium-engine

我知道当前的代码很混乱,而且还没有构建很多,但我主要还是在弄清楚如何最好地构建它。任何帮助/建议将不胜感激,但我主要关心的是如何使用 requirejs 构建它,以便更容易编译成单个文件以供生产使用。

4

1 回答 1

4

Require.js 不强制执行您的文件的任何特定结构。您可以在 require 配置中指定完整路径,也可以在 require() 或 define() 调用中使用完整路径。两者都可以,但是后者会为您节省一些打字时间,并且当您包含来自许多不同地方的内容时,可以更轻松地移动内容:

var $ = require("third-party/jquery");

require.config({
    paths: {
        "jquery": "third-party/jquery"
    }
});
var $ = require("jquery");

我希望能够彼此独立地加载模块。例如,应该可以从引擎中移除音频模块,它仍然可以工作。替换模块或添加新模块也应该很容易。

这不是 require.js 做的四个你。您可以决定何时以及何时不加载它,但您必须确保它不会破坏您的其余代码。

另外,我使用 jQuery 进行事件处理,因此需要在引擎启动之前加载它。

您可以通过几种不同的方式执行此操作。

  • require() 它在你的 main.js 中,以便它总是被加载(你也可以使用包含 jQuery 的 require-jquery.js)。
  • 将 jQuery 指定为引擎的依赖项

require.config({
    paths: {
        "jquery": "path.to.jquery",
        "engine": "path.to.engine"
    },
    shim: {
        "engine": {
            "deps": ["jquery"]
        }
    }
});
  • 将 jQuery 传递给模块中的 define() 调用(可能是最佳选择)

define(["jquery"], function ($) {
    // your engine code
}
于 2013-04-12T09:36:43.820 回答