Skip to content

基本函数查询表

名词索引

以下你可以按住ctrl键点击下面的词,可以直接定位到想了解的名词:

编程语言编程语言版本 编程语言区分
脚本编辑器注释颜色
语法禁用符号 对象(Object)数组/容器(Array) 纯数据(Json)

编程语言(javascript es5)

编程语言版本

现在网络上随便百度都能找到大量 let、const、箭头函数 等代码。

而这些内容都是es6的特性,不能在es5的环境中支持。

为了防止以后百度出现更多es789什么的乱七八糟的新功能混淆,

这里需要说明一下稳定的es5函数写法。

2020/6 ,ES11发布了。我们这ES5已经成了古董,然而新版加的一堆新特性,似乎也都用不上……

编程语言版本飞速迭代是必然趋势。但至少,es5环境可以支持毕竟古老的浏览器,包括xp系统。不管语言如何迭代,稳定的写法与用法都非常重要。所以,尽量先用 本文档 给出的格式,不建议用百度找的不明写法以及各种奇淫技巧。

至少在插件中,本文档的用法经过了反复试验,确实有效。

编程语言区分

游戏编辑器固定使用js语言(这里的js以ES5为标准),typescript暂时和js划分在一起,毕竟同源。如果你是从其他语言转到这里,有必要了解一下。

另外,截止2020/6,ruby语言已经快要死透了,现在用matlab语言的人都比用ruby的人多,如果你是从xp、va或vx转来的,赶紧弃了ruby吧。

Javascript/TypescriptC++/C#JavaPythonRuby
简介一门语言,少了node.js或html5,什么都干不了。一门语言,少了vs编译器,什么都干不了。一门语言,少了虚拟机jvm或dvm,什么都干不了。一门语言,少了python库,什么都干不了。一门语言,少了rmvx,rmva,rmxp什么都干不了……(误)
缩进随意缩进随意缩进随意缩进严格缩进随意缩进
分号可加,可不加必须加必须加可加,可不加可加,可不加
花括号函数代码块,var a = {} 定义json函数、内部类代码块,int* a = new int[3]{1, 2, 3}; 定义数组函数、内部类代码块,int a[] = new int[]{1, 2, 3}; 定义数组与函数无关(函数用冒号),a = {} 定义 字典与函数无关b = {1 => 2} 定义 散列
常量js ES5木有常量定义,ts用const a = 0;#define DRILL 0const int a =0;public static final int a = 0;木有常量定义木有常量定义
变量var a;写int a会炸。int a; float a; double a;bool a; ……int a; float a; double a;boolean a; ……a = 1a = "a"a = 1a = "a"
注释// 单行注释/* 多行注释 */// 单行注释/* 多行注释 */// 单行注释/* 多行注释 */# 单行注释’ ’ ’ 多行注释 ’ ’ ’# 单行注释=begin多行注释=end
ifif( aaa != 1 ){ . . . }else if( aaa == 1 ){ . . . }if( aaa !== 1 ){ . . . }else if( aaa === 1 )if( aaa != 1 ){ }else if( aaa == 1 )if( aaa != 1 ){ . . . }else if( aaa == 1 )if not aaa == 1 :. . .elif aaa == 1 :. . .if aaa != 1. . .elsif aaa == 1. . .
forvar a = [1,2,3];for(var i=0; i<a.length; i++)int len = 3;int* a = new int[len]{1, 2, 3};for( int i=0; i < len ; i++ )int a[] = new int[]{1, 2, 3};for(int i=0;i<a.length(); i++)a = [1,2,3]for i in range(len(a)):. . .arr = (1..10).to_afor i in arr do. . .end
布尔true和false字母必须小写true和false字母必须小写true和false字母必须小写True和False首字母必须大写true和false字母必须小写
引号单引号和双引号都表示字符串。单引号’ ’表示字符。双引号””表示字符串。单引号’ ’表示字符。双引号””表示字符串。单引号和双引号都表示字符串。单引号和双引号都表示字符串。
类成员this.xxxthis["xxx"]this.xxxthis->xxxthis.xxxthis.xxx@xxx

脚本编辑器

注释颜色

根据之前提及的js特性:

  1. 字符串的单引号和双引号都是字符串。
  2. js单行注释和多行注释没有区别,只是写法不一样。

根据上述的特性,个人在编辑器里面将上述四中内容染上了不同的显眼颜色。并且用于划分类型。如下。

/* 【rmmv默认注释,全绿】* -----------------------------------------------------------------------------* ----更新日志* [v1.0]* 完成插件ヽ(*。>Д<)o゜*/
//=============================================================================// * 插件指令【大分段】//=============================================================================var _drill_EBV_pluginCommand = Game_Interpreter.prototype.pluginCommand;Game_Interpreter.prototype.pluginCommand = function(command, args) {_drill_EBV_pluginCommand.call(this, command, args);if (command === ">事件缓存变量") {/*-----------------自定义区域【中分段】------------------*/if(args.length == 8){var unit = String(args[1]);if( unit == "本事件" ){// > 事件控制【小分段】var e_id = this._eventId;// ...}}}}
this._drill_ESE = {};this._drill_ESE['redraw_command'] = false; //重画指令this._drill_ESE['shatter_command'] = false; //碎片指令this._drill_ESE['shatter_id'] = -1; //当前碎片样式idthis._drill_ESE['shatter_data'] = {}; //当前碎片样式数据this._drill_ESE['shatter_converted'] = false; //反向弹道

区分的理由如下:

1. rmmv注释,全程字符串,没法区分。所以只要和代码颜色不一样就可以了,那么就鲜绿色吧。

”//”注释为白色,”/**/”注释为鲜绿色。

2. 单行和多行注释常用于给不同的代码分段,

图中定义了大分段(//====)、中分段(/*-----*/)、小分段(// > 步骤),因为颜色鲜明,所以很容易注意到注释内容。

3. js的字符串用的非常多,但是大多都是用于['xxxx']指向成员的。所以一般成员用的字符串,使用单引号,且颜色用深绿色,不显眼。另外,成员的英文名并不好理解,而更多的是需要关注中文注释,所以,每个成员都基本用单引号+中文注释。

4. rmmv用到字符串的时候,比较多的是bitmap资源路径、插件指令切割,为了让字符串更加显眼,所以也设置成鲜绿色。

ㄟ(ʅ⊙ω⊙) 其实你不用刻意模仿,按照你的习惯来,这里我只是提及一下我看到的代码是什么样的,因为鲜明的颜色容易引起注意,仅此而已。

比起其他编辑器花里胡哨的颜色,我的编辑器里面是完全没有 蓝色 的。

因为蓝色 = 量子妹 = 游戏界面 = 画画。

代码和画画是两个不同的维度,作为量子妹的系统世界专属之蓝,至少不会让我感到不安。

另外,代码耗血,画画耗魔,魔法肯定是蓝色的,哈哈(*ˉ﹃ˉ) 。

作者的notepad++的颜色设置:1)打开设置 > 语言格式设置2)选择的主题:twilight3)修改global styles:default style: rgb:213,187,984)修改javascript:default: rgb:219,128,66 #DB8042word: rgb:219,128,66 #DB8042symbols: rgb:219,128,66 #DB8042keyword: rgb:213,187,98stringraw: rgb:134,191,96doublestring: rgb:0,255,128comment: rgb:0,255,128commentline: 白色commentdoc: rgb:0,255,128

语法

禁用符号

首先,需要说明一下符号的问题。

1)禁用符号 ===

尽量不要使用 ”===” 符号(恒等于)。当你使用其它的语言复刻相同的功能时,这个符号会非常难受(比如js的工具函数,复刻到c++中)。当你使用 ”aaa=== undefined”,而aaa为null值时,这个符号会非常难受。

2)禁用符号 !

尽量不要使用 ”!” 符号(非)。改而使用下面的写法:if( enabled == undefined ){ …… }if( enabled == true ){ …… }if( enabled == false ){ …… }尽量少用 感叹号! 来取非值,因为 ! 会将undefined和false作为相同的结果。要注意 undefined和true 为相同意思的逻辑情况。

对象(Object)

称呼与定义: 文档或口语中提及的名词 不完全 表示真正的js定义。

比如,js中的任何类型都是对象,但在我们文档口语中,”对象” 指的并不是js底层的对象。

对象(Object): 指贴图、窗口、有图像数据的实体对象。对象的数据量非常大,一般无法使用JSON.stringify( ) 的方法显示所有数据。纯数据(Data): 指字符串、数字等基本类型的数据,包括数组和json数据。data纯数据可以保存进存档。

对象不能放才存档文件中,只能通过其他方式绕开。

因此,禁止在$gameSystem里面存放obj对象,这会把存档炸了,无法读取。

(存档底层就是 JSON数据 与 js对象 转字符串,部分js对象本身不具备转换并存储的功能,所以出错)

如果你必须要将使得对象能在全局中调用,你可以放入$gameTemp。

称呼与定义 说明: 从用法和格式上而言,由于JSON数据和js对象几乎是一模一样的,所以实际应用中,大家都傻傻分不清楚。如果统一叫 ”js对象” 反而感觉很别扭,因为js中都是对象,指代不明。而如果我说这是一个json串,那么你的脑海里一定会复现json的经典格式,便能理解这个对象的格式是json的格式。因此,为了方便理解,有时会称呼为json格式。

在drill插件中,并没有对对象的命名做明确划分。

不过,常见的 对象 命名为:temp_sprite、temp_window、event、temp_obj等。

常见的 纯数据 命名为:temp_data、data、this._drill_data。

数组/容器(Array)

在drill插件中,数组命名会习惯性地添加一个后缀”list”或”tank”(表示容器),比如”_drill_SCA_spriteTank”或”_drill_SCA_dataList”用于区分数组与json。

1)定义数组

var aaa_tank = [];

2)判断是否为数组

如果aaa_tank是字符串,那么length也会存在。

if( aaa_tank.length != undefined ){ }if( Array.isArray( aaa_tank ) )

3)判断是否为空数组

if( aaa_tank.length === 0 )

4)判断是否为非空数组

if( aaa_tank.length > 0 )

5)数组赋值

注意,数组里面只能写数字,不要错写成arr['aaa']字符串了,写成字符串不会报错,但是读到的数据会出问题。如果你加的是一个变量,建议先转一下数字。

aaa_tank[0] = 1;aaa_tank[1] = 2;aaa_tank[Number(bbb)] = 3;aaa_tank.unshift( 4 ); //头部插入aaa_tank.push( 5 ); //尾部插入

6)数组for遍历

这里建议所有数组都使用下面的标准格式,一眼就能看明白,不建议数组到处用for in、for of、foreach写法。

for( var j = 0; j < $gameSystem._drill_BBa_changingTank.length; j++ ){var temp = $gameSystem._drill_BBa_changingTank[j];//...}

7)数组for退数组

通常 整体销毁spriteTank 或 根据条件删除sprite 时经常用,注意数组必须是递减遍历。

for( var i = this._drill_ERA_animTank.length-1; i>=0; i--){var sprite = this._drill_ERA_animTank[i];this._drill_map_ui_board.removeChild(sprite);this._drill_ERA_animTank.splice(i,1); //递减遍历去除时,不会影响数组下标}

8)数组拼接数组

area_tank = area_tank.concat( aaa_tank );

9)数组map、foreach用法

ES5是支持map和foreach的,但是要注意后面要跟个 ”, this);” 回调函数。这种写法单独存在还行,而如果出现了反复嵌套,建议直接分新函数来写。

var aaa_tank = ccc_tank.map(function(value,index,array){return String(value).toUpperCase();}, this );

纯数据(Json)

在drill插件中,json命名一般会统称data,然后data下列出各种子成员。

如果变量没有”data”名字,一般可能是obj对象。

1)定义json

var data = {};

2)json赋值

注意,json最好里面只能写字符串,不要错写成data[0]了,写成数字也不会报错,但是后期读代码会很麻烦。另外,成员尽量用单引号,不要用双引号。如果你加的是一个变量,建议先转一下成字符串。

data['cancel'] = 1;data['ok'] = 2;data[String(aaa)] = 3;

3)json获取全部键

获取json的全部键:(keys是一个数组)

var key_list = Object.keys( data );

4)json遍历

建议用转数组的写法,然后进行数组遍历。

只能json遍历时,才用for in 写法。

for(var key in this._drill_AnimExData_data ){var temp = this._drill_AnimExData_data[key];}// 或者var keys = Object.keys(this._drill_AnimExData_data);for(var i = 0; i<keys.length; i++){var temp = this._drill_AnimExData_data[keys[i]];}

1)定义类(单独)

//==============================// * 时间条物体 - 定义//==============================function Drill_GOBTB_GameTimeBar() {this.initialize.apply(this, arguments);};

2)定义类(继承)

贴图继承有initialize和update两个基本函数,继承写法如下。

//==============================// * 时间条贴图 - 定义//==============================function Drill_GOBTB_TimeBarSprite() {this.initialize.apply(this, arguments);};Drill_GOBTB_TimeBarSprite.prototype = Object.create(Sprite_Base.prototype);Drill_GOBTB_TimeBarSprite.prototype.constructor = Drill_GOBTB_TimeBarSprite;//==============================// * 初始化//==============================Drill_GOBTB_TimeBarSprite.prototype.initialize = function() {Sprite_Base.prototype.initialize.call(this);// . . .};//==============================// * 帧刷新//==============================Drill_GOBTB_TimeBarSprite.prototype.update = function() {Sprite_Base.prototype.update.call(this);// . . .};

3)判断基本类型

通过typeof。注意 等于与恒等于,常用 等于”==”。

if( typeof(_drill_newEvent_event) == "undefined"){ }if( typeof(_drill_newEvent_event) === undefined )

4)判断当前类的名称

if( this.constructor.name == "Scene_Battle" )

5)判断继承的子类

if( this instanceof Drill_Sprite_LRR )

贡献者

暂无相关贡献者

页面历史

暂无最近变更历史