我正在创建一个RPG。我想根据当前级别动态加载NPC对话框js文件。
最初,我在我的game.js文件的顶部做了<script type="text/javascript" src="js/npc_dialog_level_1.js"></script>
...但是不想为每个npc_dialog.js文件继续这样做。
我宁愿做类似的事情:
if (map == 1) {
require(js/npc_dialog_level_1.js);
if (map == 2) {
require(js/npc_dialog_level_2.js);
我正在关注requireJS的教程,但我不清楚:
a)下载requireJS不包含示例中指定的helper / utils.js文件夹和文件:
project-directory/
project.html
scripts/
main.js
require.js
helper/
util.js
b)如何使用require函数:require(["helper/util"], function(util) {
在地图更改时,我只想将路径放置到关联的npc_dialog_level.js
文件中。我在哪里放置Require代码,以及如何传入它以加载正确的js文件?
每个npc_dialog_level文件都包含js对象。我在游戏中使用它来阅读对话框
var dialog = {
quests : {
Lee : {
"1 - Introductions" :
更新
我试过了:
//load NPC dialog given the map
loadNpcDialog : function (dialogNumber) {
require("npc_dialog_level_" + dialogNumber + ".js", function(dialog) {
// log(dialog);
});
},
给出:
Uncaught Error: Invalid require call
http://requirejs.org/docs/errors.html#requireargs require.js:166
答案 0 :(得分:4)
调用require
时,必须使用括号作为依赖关系列表,如下所示:
//load NPC dialog given the map
loadNpcDialog : function (dialogNumber) {
require(["npc_dialog_level_" + dialogNumber + ".js"], function(dialog) {
// log(dialog);
});
},
如果您不使用括号,那么您将使用require
的伪同步形式,其使用方式如下:var dialog = require("npc_dialog_level_" + dialogNumber + ".js")
。但是,这种伪同步形式在您的情况下不起作用。
如果您最终要将这些文件转换为JSON文件或XML,则可以使用text!
plugin加载它们。
答案 1 :(得分:2)
IFF您的对话框内容实际上都是JavaScript,然后进行后期加载相当容易。
function runNpcDialog(number) {
require(["npc-dialog-" + number + ".js"], function(dialog) {
// Run your dialog here.
});
}
否则,如果您的信息更多是JSON / XML格式,那么使用ajax
将是更好的选择。
编辑:修正语法