RPG MAKER I18N插件
1.文件操作
由于JAVASCRIPT本身不具备有本地的文件读写功能,为了获取本地化文件内容,可以通过xml读入文件。
例如
function IvCoreLoadFile(url, callback) {
var request = new XMLHttpRequest();
request.open('GET', url);
request.overrideMimeType('application/json');
request.onload = function() {
callback(JSON.parse(request.responseText));
};
request.onerror = function() {
throw new Error("There was an error loading the file '" + url + "'.");
};
request.send();
};
通过将文件操作转变为xmlHttp请求,便可像是与服务器沟通的方式获取文件内容,并对文件内容进行操作。
2.菜单设置
为了在游戏界面里的选项中新增一个Lang/语言的新设置内容,以便在游戏内切换使用的语言,可以通过调用RPGMAKER内置的函数Window_Options
进行设置界面的渲染操作,例如通过
var Add_LanguageSetting_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList= function(){
Add_LanguageSetting_makeCommandList.call(this);
this.addCommand(_param_labelOption,'language');
};
在设置界面新增一个Sybol为language的选项,而该选项渲染出来的文本则是_param_labelOption
中的内容。
但如果仅在界面渲染中设置新选项,在选项菜单关闭或游戏关闭后所设置的内容就会失效,为此必须储存在RPG MAKER储存选项内容的文件中
例如
1.定义新属性
Object.defineProperty(ConfigManager, 'language', {
get: function() { return _language; },
set: function(value) { _language = value; }
});
2.游戏初始化完成后读取选项内容
var alias_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
alias_applyData.call(this, config);
this.language = _applyLanguage(config.language);
};
3.reduce函数
reduce函数的结构是reduce(callbackFn, initialValue)
,callbackfn分别接收4个变量:accumulator
上次调用函数的结果currentValue
本次回调时的值currentIndex
本次回调的值在数组中的索引位置,数组下标?array
就是数组本身
此外,initilvalue是可空的,如果加了这个值,则这个值将在首次运行时和数组的第一位开始运算,例如,我们定义一个const number = [1,2,3]
的数组,然后调用该函数:
const number = [1,2,3];
number.reduce((acc,curV,curI,array)=>acc+curV
这段代码中我们没有定义initilvalue,所以在代码首次运行中,acc=1(数组中的第一位),curV=2,curI=1(代表数组中的第二位),array=[1,2,3],最终的结果是1+2+3(acc+curV迭代三次,acc即为上次调用函数的结果,也就是第二次调用会是1+2的和3,3+3)则是6,而如果对这段代码稍作修改,变成
const number = [1,2,3];
number.reduce((acc,curV,curI,array)=>acc+curV,4)
由于这段代码定义了initilvalue,所以他在首次运行中,acc就不在是数组第一位的1,而是initilvalue代表的值4,将会变成4+1+2+3,curV才会变成数组中的第一位1,curI也理所当然的会变成0(代表数组中的第一位),array不变,因为我们没有改变数组内容,而是在函数中定义了initilvalue这一项。而最终的结果也会是10(4+1+2+3)