JavaScript学习记录

⚠️ 本文最后更新于2024年04月28日,已经过了366天没有更新,若内容或图片失效,请留言反馈

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)

By 莎莎 On