#RPG Maker MV

事件脚本,

是很多萌新一直想学会怎么用,但是又不知道从哪里入门的东西

今天,就来给大家简单讲一讲

希望对你有所帮助

001.png (131.54 KB, 下载次数: 232)

下载附件

保存到相册

2019-8-16 10:39 上传

在脚本指令的第三页,有一个脚本功能,

怎么用呢?

我们先来一句最简单的JavaScript脚本:

JAVASCRIPT 代码复制console.log('Hello World!')console.log('Hello World!')

002.png (9.8 KB, 下载次数: 216)

下载附件

保存到相册

2019-8-16 10:40 上传

就随便放在一个NPC身上

a00.png (84.07 KB, 下载次数: 212)

下载附件

保存到相册

2019-8-16 10:40 上传

运行游戏,每次跟她触发一次对话

你都会发现。。。。。

她好像什么事都没有发生一样

站在一片空荡荡地草原,一个人静静地望着远方.......

不管你怎么跟她讲话

她都不想理你.....

等等!

你再按下键盘按键F8(或者F12),

可以显示开发者控制台,

在Console标签页面,日志里可以看到多了一句话

a01.png (106.18 KB, 下载次数: 190)

下载附件

保存到相册

2019-8-16 10:41 上传

然后,

我们也可以直接通过Developer Tools输入脚本,

跟在事件指令中使用脚本指令调用脚本的作用是一样的。

a02.png (21.06 KB, 下载次数: 212)

下载附件

保存到相册

2019-8-16 10:41 上传

你把刚才那句脚本在这里输入试试~

a03.png (21.88 KB, 下载次数: 219)

下载附件

保存到相册

2019-8-16 10:42 上传

JAVASCRIPT 代码复制console.log("Hi, Welcome to Project1")console.log("https://rpg.blue/thread-383083-1-1.html")console.log("Hi, Welcome to Project1")

console.log("https://rpg.blue/thread-383083-1-1.html")

对了。

这篇文章即将要讲解事件脚本的使用,也是直接在这里测试。

因为在这里输入完,游戏里就会同步显示,非常方便!

那么,在这里该如何写脚本呢?

官方开发组的Archeia大佬已经整理了一个超级完整的事件脚本文档。

在Google搜索"RMMV Script Calls"就能找到(RMVA版也有)

10.png (186.98 KB, 下载次数: 184)

下载附件

保存到相册

2019-8-16 10:43 上传

不过Google文档在国内是打不开的,

所以为了方便其他用户阅读,我把文档搬运到这里:

https://shimo.im/sheets/RykXT9vdTXWtqwT3/

先来看看表格前面几行

11.png (61.39 KB, 下载次数: 184)

下载附件

保存到相册

2019-8-16 10:43 上传

对比一下,是不是发现,这份文档其实是按照事件指令的顺序整理好的!

100.png (111.08 KB, 下载次数: 196)

下载附件

保存到相册

2019-8-16 10:44 上传

e100.png (125.99 KB, 下载次数: 188)

下载附件

保存到相册

2019-8-16 10:44 上传

为了让大家更容易理解事件脚本,我在截图的时候会把英文页面也一起贴出来,大家可以和中文页面对比一下,就会知道为什么脚本为什么是这样写了~

101.png (14.51 KB, 下载次数: 184)

下载附件

保存到相册

2019-8-16 10:45 上传

e101.png (16.66 KB, 下载次数: 200)

下载附件

保存到相册

2019-8-16 10:45 上传

显示文字

Show Text

事件指令:

在正常使用事件指令来显示文字,是这样用的:

1011.png (16.64 KB, 下载次数: 200)

下载附件

保存到相册

2019-8-16 10:46 上传

e1011.png (19.42 KB, 下载次数: 186)

下载附件

保存到相册

2019-8-16 10:46 上传

这里有几个可以让你自定义的选项:

- 显示脸图(可选)

- 设置对话框窗口背景

- 设置对话框窗口位置

- 输入文本内容

这个你已经是非常熟悉了,反正往最大的框框打字就对了。

事件脚本:

如果要用脚本来显示文字,只需要这句:

$gameMessage.add("俺はルフィ,海贼王になる男だ")复制代码

a04.png (20.16 KB, 下载次数: 199)

下载附件

保存到相册

2019-8-16 10:47 上传

然后在游戏中就会显示这句对话了~

a05.png (97.03 KB, 下载次数: 192)

下载附件

保存到相册

2019-8-16 10:47 上传

如果想要添加脸图,需要在显示文字的脚本前面,多写一句

$gameMessage.setFaceImage('Actor1',0)

$gameMessage.add("\\C[2]\\P[1]:\\C[0]\n嗨,冒险者,好久不见啊!")复制代码

就相当于,选择素材库的"Actor1.png",第1张脸图

a08.png (170.19 KB, 下载次数: 186)

下载附件

保存到相册

2019-8-16 10:48 上传

有萌新可能不懂了,既然是显示第1张图

为什么setFaceImage('Actor1', 0), 这后面居然是 0 ,而不是1呢?

$gameMessage.setFaceImage('Actor1',0)复制代码

在编程语言里,数组都是从0开始计数的。

也就是说,最后第8位绿头紫瞳小姐姐,她的编号是7

a11.png (22.63 KB, 下载次数: 196)

下载附件

保存到相册

2019-8-16 10:49 上传

a10.png (121.43 KB, 下载次数: 215)

下载附件

保存到相册

2019-8-16 10:49 上传

显示对话框脸图知道怎么用脚本了,

窗口背景,窗口位置,其实也是一样的用法

如果要设置样式,要在显示对话之前设置好

$gameMessage.setFaceImage('Actor1',0)

$gameMessage.setBackground(1)

$gameMessage.setPositionType(1)

$gameMessage.add("Show Text Script Call")复制代码

刚才已经说了,0就是数组的第1项

设置对话框背景:

这里选中的就是列表中的第二个选项

$gameMessage.setBackground(1)复制代码

相当于

a12.png (23.46 KB, 下载次数: 204)

下载附件

保存到相册

2019-8-16 10:50 上传

设置对话框窗口位置:

$gameMessage.setPositionType(1)复制代码

相当于

a13.png (23.52 KB, 下载次数: 206)

下载附件

保存到相册

2019-8-16 10:51 上传

这样看明白了吗?

还有个问题

用事件脚本显示的文字,能不能加转义符?

a14.png (59.55 KB, 下载次数: 189)

下载附件

保存到相册

2019-8-16 10:51 上传

当然能啊,其实我前面已经有示范了~

还记得这个吗?

$gameMessage.setFaceImage('Actor1',0)

$gameMessage.add("\\C[2]\\P[1]:\\C[0]\n嗨,冒险者,好久不见啊!")复制代码

实际上就相当于:

a09.png (46.44 KB, 下载次数: 198)

下载附件

保存到相册

2019-8-16 10:52 上传

要注意的是,脚本里如果需要换行,需要用 \n 作为换行符,可不能随便加回车噢!

然后其他的转义符要在前面多加一个 \

比如第1号变量 \V[1],在这里就要写成 \\V[1]

既然说到变量,顺便来讲讲变量吧:

变量操作

Control Variables

其实用起变量来更简单,而且更好玩!

c3.png (14.93 KB, 下载次数: 216)

下载附件

保存到相册

2019-8-16 10:53 上传

c4.png (17.89 KB, 下载次数: 210)

下载附件

保存到相册

2019-8-16 10:53 上传

事件指令是这样的:

c1.png (35.06 KB, 下载次数: 200)

下载附件

保存到相册

2019-8-16 10:54 上传

c2.png (35.65 KB, 下载次数: 250)

下载附件

保存到相册

2019-8-16 10:54 上传

如果想要让变量 = 某个数字,比如

c5.png (41.65 KB, 下载次数: 211)

下载附件

保存到相册

2019-8-16 10:55 上传

用脚本来实现就是:

$gameVariables.setValue(1, 20);复制代码

顺便在显示文字中预览一下:

$gameVariables.setValue(1, 20);

$gameMessage.add("变量:" + $gameVariables.value(1))复制代码

c6.png (22.73 KB, 下载次数: 194)

下载附件

保存到相册

2019-8-16 10:56 上传

注意到了吗?

我在显示对话里面加了一个新的东西

$gameVariables.value(n)复制代码

这个是用来获取变量的

$gameVariables.value(n)

而这是用来操作变量的

$gameVariables.setValue(n)

获取变量和在显示文章中的 \V[n] 的作用一样

这个n就是第几号变量的意思

其实就相当于这么写

这两句对话的结果是相同的:

$gameMessage.add("变量:" + $gameVariables.value(1))

$gameMessage.add("变量:\\V[1]")

复制代码

所以,如果你希望某个变量的值等于另一个变量的值

c8.png (43.86 KB, 下载次数: 213)

下载附件

保存到相册

2019-8-16 10:58 上传

就是这样:

$gameVariables.setValue(1, $gameVariables.value(2));复制代码

随机数:

在事件指令面板中,

你想要随机得到一个1~5的数字:

c7.png (39.96 KB, 下载次数: 227)

下载附件

保存到相册

2019-8-16 10:58 上传

在脚本中看到的随机数函数函数是这样的:

Math.randomInt(n) 复制代码

但是,如果你像前面教你的一样,马上写出了这样一句。。

$gameVariables.setValue(2, Math.randomInt(5))复制代码

表面看起来好像没错,

然而,实际上的结果,却是这样的:

c9.png (40.35 KB, 下载次数: 220)

下载附件

保存到相册

2019-8-16 10:59 上传

为什么?

来跟大家讲解下这个随机数函数的用法:

Math.randomInt(n)

返回的是 0 ~ n 之间的正整数(但不包括n)

所以,Math.randomInt(5)

这样得到的数字只有:0、1、2、3、4

正确的用法是:

1 + Math.randomInt(5)复制代码

这样就能得到 1~5 之间的数字了~

如果你想要使用更多数学函数,可以去翻一下JavaScript的Math库,还有很多好用的数学函数,比如:

// 向下取整

Math.floor(x)

//四舍五入

Math.round(x)

// 绝对值

Math.abs(x)

//最大值最小值

Math.max(x,y)

Math.min(x,y)

// 三角函数

Math.sin(x)

Math.cos(x)

Math.tan(x)

// 平方根

Math.sqrt(x)

// 求x的y次方:

// Math.pow(3,4) = 3*3*3*3

Math.pow(x,y)复制代码

游戏数据:

用变量代入游戏数据,是事件中非常非常非常重要的一个功能

c10.png (34.49 KB, 下载次数: 220)

下载附件

保存到相册

2019-8-16 11:01 上传

c11.png (37.53 KB, 下载次数: 202)

下载附件

保存到相册

2019-8-16 11:01 上传

而且,这个用脚本更加方便!!

$gameVariables.setValue(6, $gamePlayer.x)

$gameVariables.setValue(7, $gamePlayer.y)

$gameVariables.setValue(8, $gameMap.events()[n].x)

$gameVariables.setValue(9, $gameMap.events()[n].y)复制代码

这个能看懂吗?

// 设置变量6,7号为玩家坐标的x、y

$gameVariables.setValue(6, $gamePlayer.x)

$gameVariables.setValue(7, $gamePlayer.y)

// 设置变量8,9号为第n号事件的坐标x、y

$gameVariables.setValue(8, $gameMap.events()[n].x)

$gameVariables.setValue(9, $gameMap.events()[n].y)复制代码

这两个是玩家的坐标

$gamePlayer.x

$gamePlayer.y复制代码

第n号地图事件的坐标

$gameMap.events()[n].x

$gameMap.events()[n].x复制代码

数据库的数据

c12.png (36.02 KB, 下载次数: 186)

下载附件

保存到相册

2019-8-16 11:03 上传

c13.png (38.25 KB, 下载次数: 187)

下载附件

保存到相册

2019-8-16 11:03 上传

c15.png (51.73 KB, 下载次数: 211)

下载附件

保存到相册

2019-8-16 11:02 上传

c14.png (50.9 KB, 下载次数: 206)

下载附件

保存到相册

2019-8-16 11:02 上传

$gameActors.actor(1)._name

$gameActors.actor(1)._exp[1] //经验值

$gameActors.actor(1).level //等级

$gameActors.actor(1).hp

$gameActors.actor(1).mp

$gameActors.actor(1).mhp

$gameActors.actor(1).mmp

$gameActors.actor(1).atk //攻击力

$gameActors.actor(1).def //防御力

$gameActors.actor(1).mat //魔法攻击

$gameActors.actor(1).mdf //魔法防御

$gameActors.actor(1).agi //敏捷

$gameActors.actor(1).luk //幸运复制代码

如果不知道具体还有哪些属性,有个超级好用的办法:

直接获取一个对象,就可以看到它的所有属性方法了

$gameActors.actor(1)复制代码

640.jpg (96.61 KB, 下载次数: 183)

下载附件

保存到相册

2019-8-16 11:04 上传

你看,这些游戏数据,全都在这里啦!

至于它们为什么显示(...)呢?你鼠标点击一下,有惊喜。

既然能获取了,那能不能修改呢?

直接赋值,像$gameActors.actor(1)._exp[1] = 100 这样行不行?

当然不行!这是错误的

但是已经有现成的方法可以用了:

$gameActors.actor(1).gainExp(50); // 增加50点经验值

$gameActors.actor(1).gainExp(-50); // 减少50点经验值复制代码

第3名队友增加50点经验值

$gameParty.members()[2].gainExp(50);复制代码

全体队友减少1点经验

$gameParty.members().forEach(function(m){

m.gainExp(-1)

});复制代码

最后再讲一个最最最最最实用的事件脚本!

操作开关

Control Switch

操作开关也是非常重要的一个功能

c16.png (15.34 KB, 下载次数: 195)

下载附件

保存到相册

2019-8-16 11:06 上传

c17.png (17.1 KB, 下载次数: 224)

下载附件

保存到相册

2019-8-16 11:06 上传

用起来更是简单:

$gameSwitches.setValue(id, true/false);复制代码

举例:

打开 1 号开关

$gameSwitches.setValue(1, true);复制代码

关闭 5 号开关

$gameSwitches.setValue(5, false);复制代码

花式玩法:

$gameSwitches.setValue(1, ($gameVariables.value(1) >= 10))复制代码

这个什么意思?

拆解一下:原本的结构是这样滴。

$gameSwitches.setValue(id, true/false); 复制代码

首先,1 是 id 很好理解了。

然后,($gameVariables.value(3) >= 10) 是什么?

噢, $gameVariables.value(3) 前面讲到了,是获取 3 号变量。

那就变成了 (3号变量 > 10),判断 3号变量是否大于并等于10。如果>=10,返回 true。 如果小于10,返回 false。

所以啊,这句的意思就是判断 3号变量是否大于10,如果是,打开1号开关。

这是不是可以用在某些游戏关卡上面呢?根据某些变量,解锁特定内容?

再来看一个复杂点的!

真的,很复杂!

$gameSwitches.setValue(1,

($gameSwitches.value(1) == false) &&

($gameSwitches.value(2) == true) &&

($gameSwitches.value(3) == true)

)复制代码

这个什么意思?

如果1号开关为OFF,

并且2号开关和3号开关都为ON的状态,

那么就把1号开关ON;否则,保持OFF状态。

我们来测试一下:

在测试模式中按下键盘F9,可以开启DEBUG面板

默认的DEBUG面板可以直接看到变量和开关的值

c20.png (162.12 KB, 下载次数: 193)

下载附件

保存到相册

2019-8-16 11:07 上传

然后,把1号开关关闭;并且打开2、3号开关

$gameSwitches.setValue(1,false)

$gameSwitches.setValue(2,true)

$gameSwitches.setValue(3,true)复制代码

再按2下键盘的F9,重新进入DEBUG面板,

可以看到已经发生了变化

c22.png (161.61 KB, 下载次数: 189)

下载附件

保存到相册

2019-8-16 11:09 上传

然后我们运行上面的脚本:

$gameSwitches.setValue(4,

($gameSwitches.value(1) == false) &&

($gameSwitches.value(2) == true) &&

($gameSwitches.value(3) == true)

)复制代码

很明显,全都满足了我们想要的条件,相当于:

$gameSwitches.setValue(4,

(true) && (true) && (true)

)复制代码

就相当于这样:

$gameSwitches.setValue(4,true)复制代码

所以1号开关,也就打开了

c21.png (161.97 KB, 下载次数: 237)

下载附件

保存到相册

2019-8-16 11:08 上传

那如果我们再运行一次脚本

这时候明显是不满足判断条件的,

所以,就会变成这样:

$gameSwitches.setValue(4,

(false) && (true) && (true)

)复制代码

就相当于这样:

$gameSwitches.setValue(4,false)复制代码

1号开关会还原回去,变成OFF了

以某个开关的状态来判断目前开关状态应该打开还是关闭,这个应该是比较频繁的操作了。

直接这样看好像有点懵逼,换做具体的应用场景,应该就会比较好理解了~

例如,

1号开关:是否第一次进入场景? (否)

2号开关:是否解锁了剧情A?(是)

3号开关:是否解锁了剧情B?(是)

如果满足了这些条件,就打开 4号开关。

操作独立开关

Control Self Switch

跟你说,用脚本来控制开关,真的超级超级超级实用!

c18.png (11.86 KB, 下载次数: 211)

下载附件

保存到相册

2019-8-16 11:11 上传

c19.png (12.51 KB, 下载次数: 210)

下载附件

保存到相册

2019-8-16 11:11 上传

因为,在正常使用事件指令的时候,

你是没有办法在A事件里面控制B事件的独立开关的!!

但是!!!

脚本可以啊!!

$gameSelfSwitches.setValue([mapID, eventID, 'A'], true);复制代码

比如:

控制 1号地图,第3号事件 的独立开关A,设置为OFF

$gameSelfSwitches.setValue([1, 3, 'A'], false);[/code]

注意,这里的第1个参数是个数组。如果不好理解,也可以试试这样:

控制1号地图,第5号事件的独立开关A,设置为ON

const key = [1, 5, 'A'];

$gameSelfSwitches.setValue(key, true);复制代码

花式玩法:

关闭当前事件所在的地图第1、2、3、4、5号事件的独立开关A、B、C、D

var eventIds = [1, 2, 3, 4, 5];

var letters = ['A','B','C','D']

for (var i = 0; i < eventIds.length; i++) {

for (var j = 0; j < letters.length; j++) {

var key = [this._mapId, eventIds[i], letters[j]];

$gameSelfSwitches.setValue(key, false);

}

}复制代码

关闭当前事件身上的所有独立开关

$gameSelfSwitches.clear();复制代码

-END-

更多的方法,自己看表格文档吧。。

RMMV Script Calls

https://docs.google.com/spreadsh ... KO75dtfKDOetnvh7OHs

打不开Google文档的,可以看下面这个:

https://shimo.im/sheets/RykXT9vdTXWtqwT3/

对了,还有@绝汪 整理的这个RMMV事件脚本整合

https://rpg.blue/thread-403194-1-1.html

好了,今天先介绍这么多了

有空再更新~

(我也不知道哪天有空)

ceeb653ejw1fap25167pyj207k07h74k.jpg (20.27 KB, 下载次数: 179)

下载附件

保存到相册

2019-8-16 11:15 上传

Copyright © 2088 樊振东世界杯_世界杯开幕 - tyzksb.com All Rights Reserved.
友情链接