#===================================================================#
# Bunny神的RMXP事件脚本实用小手册 #
#===================================================================#
(\__/) 作者:Team Bunny God (\__/)
("=.=) 版权所有:[url]http://bbs.rpgchina.com[/url] 幻想森林论坛 (=.=")
( ~ )~ 可以随便转载,不过请保留版权信息完整~~~ ~( ~)
#===================================================================#
# Bunny神温馨提示 #
#===================================================================#
由于为了保证每个人都可以能看这个(以前做的地图教程有很多人反馈没有Word就打不开),所以就直接用记事本写了,可能有些简陋,但是绝对保证语法的准确性XD。。。。。。
本手册的邪恶目的就是让大家学习一些常用的事件脚本,方便制作游戏~~~这个东西可以完成许多事件无法完美实现的东西,但是好像还没有看到有人写过这样的东西,那就由我来写好了-v-)/。。。不过千万不要每次都直接复制粘贴,不然可是学不到东西的-v-。。。啊,见仁见智吧。。。
PS:此物完全是根据个人的学习经验所写,不一定完整,而且可能有些地方会有错误,请见谅。
#===================================================================#
# 什么是事件脚本?好吃吗?是有机物? #
#===================================================================#
先来说明一下什么是事件脚本(啰嗦的大妈-v-|||),如果已经懂得的人请无视~~~事件脚本就是在事件中调用的脚本(废话),包括在事件指令的第三页的最后一项(写着“脚本”的那个),条件分歧里面的最后一个选项,以及设置移动路线指令的最后一个选项。那些就是了~~~一打开是空的,什么也没有(这也是废话),这就是让大家写事件脚本的地方了~事件脚本就写在这里,格式和脚本编辑器里的差不多。。。事件脚本有什么功能呢?这个之前已经提到过,此物既可以完成事件可以完成的东西,也可以完成一些事件无法完成的东西或者使事件可以完成的东西更加完美。而且大部分的事件脚本都可以在脚本编辑器中使用,可以当作脚本练习~~~好了,既然大家对这个东西已经有所了解,那就开始吧~~~(有了解吗= =|||可能一两句话说得不是很清楚啦。。。嘻嘻嘻。。。主要还是靠经验了,多练习咯。。。)
#===================================================================#
# 事件脚本实现原有事件的功能 #
#===================================================================#
先来介绍一下事件本身就可以实现的功能是如何用事件脚本来实现的,这个主要是用于学习,需要掌握,虽然实用价值不高(因为本身事件就可以实现这些东西了,没必要再写这么堆东西来假装高手-v-。)但是却是事件脚本的基础知识。
1。显示文章
$game_temp.message_text = "你想要的文字"
比如你在事件脚本里打上$game_temp.message_text = "啊啊啊!",那就会出现一个对话框写着“啊啊啊!”。
2。更改对话框位置
$game_system.message_position = 数字
这个数字代表的是对话框的显示位置,默认的只有三个位置,但是可以通过在脚本Window_Message里面自行添加新的位置(不是本教程的内容,就不说了。)0代表在上面显示,1代表在中间,2代表在下面。当然也可以是别的数字,不过必须在Window_Message里面定义。
3。更改对话框透明度
$game_system.message_frame = 数字
这里的数字只能是0或者1,0代表完全不透明,1代表完全不透明。当然这个和对话框的显示位置一样,也可以在脚本Window_Message里面添加新的选项以做出不同的透明度。
4。等待
@wait_count = 等待帧数
比如@wait_count = 30就是等待30帧。
5。调用公共事件
$game_temp.common_event_id = 公共事件的编号
比如$game_temp.common_event_id = 1就是调用一号公共事件。
6。开关操作
$game_switches[变量编号] = true/false
true代表打开开关,而false则代表关闭开关。
比如$game_switches[1] = true就是打开一号开关。
7。变量操作
变量操作和别的操作相比有所不同,因为变量可以代入很多东西~
$game_variables[变量编号] = 变量数值
这个变量数值可以是很多东西,可以是:
$game_variables[1] = 16(直接代入数字,这个代表一号变量的数值为16。)
$game_variables[1] = $game_variables[2](一号变量等于二号变量的数值)
$game_variables[1] = rand(60)(一号变量等于0到59的随机数)
$game_variables[1] = $game_actors[1].hp(一号变量等于一号角色的HP)
$game_variables[1] = $game_actors[1].sp(一号变量等于一号角色的SP)
$game_variables[1] = $game_party.item_number(1)(一号变量等于一号道具的数量)
等等等。。。
总之,只要是一切可以用数字表示的东西,都可以代入变量,甚至是计算!比如:$game_variables[1] = $game_variables[2] + 18就代表一号变量的值是二号变量的值加上18。
以下是一些在事件的变量操作中可以用数字表示的东西!也适用于事件脚本!
$game_actors[角色编号].hp 指定编号的角色的HP
$game_actors[角色编号].sp 指定编号的角色的SP
$game_actors[角色编号].maxhp 指定编号的角色的最大HP
$game_actors[角色编号].maxsp 指定编号的角色的最大SP
$game_actors[角色编号].exp 指定编号的角色的经验值
$game_actors[角色编号].level 指定编号的角色的等级
$game_actors[角色编号].class_id 指定编号的角色的职业编号
$game_actors[角色编号].weapon_id 指定编号的角色的武器编号
$game_actors[角色编号].armor1_id 指定编号的角色的盾牌编号
$game_actors[角色编号].armor2_id 指定编号的角色的头部防具编号
$game_actors[角色编号].armor3_id 指定编号的角色的身体防具编号
$game_actors[角色编号].armor4_id 指定编号的角色的装饰品编号
$game_actors[角色编号].str 指定编号的角色的力量
$game_actors[角色编号].dex 指定编号的角色的灵巧
$game_actors[角色编号].agi 指定编号的角色的速度
$game_actors[角色编号].int 指定编号的角色的魔力
$game_actors[角色编号].atk 指定编号的角色的攻击力
$game_actors[角色编号].pdef 指定编号的角色的物理防御
$game_actors[角色编号].mdef 指定编号的角色的魔法防御
$game_actors[角色编号].eva 指定编号的角色的回避修正
$game_troop.enemies[敌人编号].hp 指定编号的敌人的HP,角色的一些资料可以同样用在敌人身上(哪些才能用应该看得出吧= =|||),比如sp,str,dex等等。
$data_enemies[敌人编号].maxhp 此为非战斗状态调用敌人编号数值
$game_player.x 角色的地图x坐标
$game_player.y 角色的地图y坐标
$game_player.direction 角色的朝向下/左/右/上分别是2/4/6/8
$game_player.screen_x 角色的屏幕x坐标
$game_player.screen_y 角色的屏幕y坐标
$game_player.terrain_tag 角色的地形标志
$game_map.map_id 当前地图的ID
$game_map.events[事件编号].x 指定编号的事件的地图x坐标,所有和$game_player相关的东西其实都可以换成和地图的某个事件相关,只要把$game_player换成$game_map.events[事件编号]就可以了,如果需要的是本事件,则在事件编号处直接写上@event_id。
$game_party.actors.size 同伴人数
$game_party.steps 步数
$game_party.gold 所持金钱
Graphics.frame_count / Graphics.frame_rate 游戏总时间(秒)
$game_system.timer / Graphics.frame_rate 计时器时间(秒)
$game_system.save_count 存档次数
大概就是这些了。。。嘻嘻嘻。其实还有很多,但是没全部写出来,大家自己去发掘吧!记住!BT者无所不能。。。什么?错了错了,应该是所有用数字能表示的东西都可以代入变量!
8。计时器操作
要操作计时器,必须先用
$game_system.timer = 计时器的时间(秒)* Graphics.frame_rate
来设定计时器的时间,然后使用$game_system.timer_working = true来启用计时器。如果要关闭计时器,则使用$game_system.timer_working = false。
9。增减金钱
$game_party.gain_gold(金钱数量)
或者是$game_party.gold += 金钱数量
两者都可以使用,意义是一样的。比如$game_party.gain_gold(100)和$game_party.gold += 100是一样的。
10。增减物品
$game_party.gain_item(物品编号,增加数量)
或者$game_party.item_number(物品编号) += 数量
$game_party.lose_item(物品编号,减少数量)
或者$game_party.item_number(物品编号) -= 数量
比如$game_party.gain_item(1,2)就是一号物品增加两个,$game_party.lose_item(3,1)就是三号物品减少一个。
11。增减武器
和增减物品道理相同,只是把所有的item换成了weapon(=_=|||),操作方法和原理都相同。
$game_party.gain_weapon(武器编号,增加数量)
或者$game_party.weapon_number(武器编号) += 数量
$game_party.lose_weapon(武器编号,减少数量)
或者$game_party.weapon_number(武器编号) -= 数量
比如$game_party.gain_weapon(1,2)就是一号武器增加两个,$game_party.lose_weapon(3,1)就是三号武器减少一个。
12。增减防具
和增减物品道理相同,只是把所有的item换成了armor(Orz无限),操作方法和原理都相同。
$game_party.gain_armor(防具编号,增加数量)
或者$game_party.armor_number(防具编号) += 数量
$game_party.lose_armor(防具编号,减少数量)
或者$game_party.armor_number(防具编号) -= 数量
比如$game_party.gain_armor(1,2)就是一号防具增加两个,$game_party.lose_armor(3,1)就是三号防具减少一个。
13。替换队员
用$game_party.add_actor(角色编号)加入队员,用$game_party.remove_actor(角色编号)让队员离队。如果需要初始化队员,就用$game_party[角色编号].setup(角色编号)。比如
$game_party.add_actor(1)
$game_party[1].setup(1)
就是在队伍中加入一号角色并且初始化。
14。更改窗口皮肤
$game_system.windowskin_name = "窗口皮肤文件的名称"
比如$game_system.windowskin_name = "01"就是把当前的窗口皮肤文件换成一个叫做01的窗口皮肤文件,所有窗口皮肤文件都是放在Windowskins文件夹里面的。
15。更改禁止存档
$game_system.save_disabled = true/false
true代表禁止存档,false代表可以存档。
16。更改禁止菜单
$game_system.menu_disabled = true/false
true代表禁止呼出菜单,false代表可以呼出菜单。
17。更改禁止遇敌
$game_system.encounter_disabled = true/false
true代表禁止遇敌,false代表可以遇敌。
18。设置事件位置
$game_map.events[事件编号].moveto(地图x坐标,地图y坐标)
比如$game_map.events[3].moveto(5,6)就是把3号事件移到地图的5,6坐标的位置上。
19。画面卷动
$game_map.start_scroll(卷动方向,卷动距离,卷动速度)
数字2/4/6/8代表方向下/左/右/上,距离自定(别卷出地图了),卷动速度为1到6,当然要更大的数也可以,不过可能太快了,没什么意义= =|||。。。比如$game_map.start_scroll(4,5,3)
就表示画面以慢速(3是慢速)向左(4)卷动5格。
20。显示动画
显示在角色身上就使用$game_player.animation_id = 动画编号,比如
$game_player.animation_id = 3就是在角色身上显示三号动画。那如何在事件上显示动画呢?这个之前已经讲过了$game_player和事件的某种邪恶关系,如果记不住了,请回前面查找(邪恶)。。。
21。角色透明
$game_player.transparent = true/false
true代表角色透明,false代表角色不透明。
22。等待移动结束
@move_route_waiting = true
23。更改画面色调
$game_screen.start_tone_change(Tone.new(红色调,绿色调,蓝色调,灰度),时间)
比如$game_screen.start_tone_change(Tone.new(0,0,0,255),20)就是在20帧的时间内将画面色调渐变为灰色(做那种黑白场景用的)。
24。画面闪烁
$game_screen.start_flash(Color.new(红色调,绿色调,蓝色调,强度),时间)
比如$game_screen.start_flash(Color.new(255,255,0,255),2)就是持续2帧的黄色闪烁。
25。画面震动
$game_screen.start_shake(震动强度,震动速度,震动时间)
强度和速度为1到9,当然也可以更大!
比如$game_screen.start_shake(9,9,20)就是以9的强度9的速对火动画面20帧。
26。显示图片
$game_screen.pictures[图片编号].show("图片名字", 原点, 画面x坐标, 画面y坐标, x轴放大率, y轴放大率, 不透明度, 显示方式)
这个稍微复杂些,分开来讲会比较好~~~
图片名字就是要显示的图片的名字。
原点就是显示图片的原点位置,0代表左上,1代表中心。
画面的x坐标和y坐标就是图片原点的画面的x坐标和y坐标。
x轴放大率和y轴放大率就是以原点为中心的x方向和y方向放大率,100为正常大小。
不透明度就是图片的不透明度,为0到255。
显示方式其实就是图片的合成方式,0是正常,1是加法,2是减法。
比如$game_screen.pictures[1].show("BunnyGod", 1, 320, 240, 100, 100, 255, 0)
就是在画面中心显示一张正常大小,完全不透明,显示方式为正常,编号为1的叫做BunnyGod的图片。
27。移动图片
$game_screen.pictures[图片编号].move(移动时间, 原点, 画面x坐标, 画面y坐标, x轴放大率, y轴放大率, 不透明度, 显示方式)
原理和显示图片一样,由于图片已经显示,所以原本的图片名字也变成了移动时间。
比如$game_screen.pictures[1].move(20, 0, 0, 0, 100, 100, 0, 0)
就是在20帧内移动编号为1的图片并让其渐渐消失(注意:图片的移动都是渐变式的,不仅是位置,图片的大小和透明度也会跟着一起渐渐变化,就是用来做淡出和淡入图片用的。)。
28。旋转图片
$game_screen.pictures[图片编号].rotate(旋转速度)
这个旋转速度是由什么来决定的呢?到底代表着什么?其实这个代表的就是图片在每1帧内的旋转角度,而不是“速度”,由于旋转角度大了,自然速度看起来就快。这个值可以是负数,用来决定旋转的方向。正数是顺时针转,负数是逆时针转。
比如$game_screen.pictures[1].rotate(18)就是让一号图片以每帧18度的速度旋转。
29。图片消失
$game_screen.pictures[图片编号].erase
比如$game_screen.pictures[1].erase就是让编号为1的图片消失。
30。准备渐变
Graphics.freeze
31。执行渐变
Graphics.transition(时间, "Graphics/Transitions/渐变图形名称")
比如Graphics.transition(20, "Graphics/Transitions/01")就是在20帧内用渐变图形“01”的图案渐变。
32。播放BGM
Audio.bgm_play("Audio/BGM/音乐文件名", 音量, 频率)
比如Audio.bgm_play("Audio/BGM/Orz", 100, 100)就是让名为Orz的音乐文件以背景音乐形式放出来。
33。播放BGS
Audio.bgs_play("Audio/BGS/音乐文件名", 音量, 频率)
原理和播放BGM相同,只是所有的bgm被改成了bgs。
34。播放SE
Audio.se_play("Audio/SE/音乐文件名", 音量, 频率)
原理和播放BGM相同,只是所有的bgm被改成了se。
33。播放ME
Audio.me_play("Audio/ME/音乐文件名", 音量, 频率)
原理和播放BGM相同,只是所有的bgm被改成了me。
34。记忆BGM/BGS
$game_system.bgm_memorize
$game_system.bgs_memorize
有没有发现这两个其实很类似?一个是记忆BGM,一个是记忆BGS,其实是可以分开来用的~~~
35。还原BGM/BGS
$game_system.bgm_restore
$game_system.bgs_restore
这个和记忆方法一样,也可以分开来用。
36。停止SE
Audio.se_stop
37。天候设置
$game_screen.weather(类型, 强度, 时间)
类型0是没有,1是雨,2是风,3是雪,强度为1到9。
比如$game_screen.weather(1, 9, 10)就是在10帧的时间里将天气变为暴雨。
38。增减角色的HP,SP等能力相关数值
$game_actor[角色编号].hp += 数值
这个就是让特定角色的生命值增加你想要的数值(-=就是减少),同理也可以运用在sp,exp,str等等数值上。
比如$game_actor[2].level += 5就是让二号角色的等级加5。但是有一点,如果使用这个指令来减少HP的话,即使角色的HP减到0也不会死!这点和事件比起来就差了。
39。完全回复
$game_actors[角色编号].recover_all
比如$game_actors[1].recover_all就是让一号角色完全恢复。
40。增减特技
用$game_actors[角色编号].learn_skill(特技编号)习得特技
用$game_actors[角色编号].forget_skill(特技编号)遗忘特技
我想懂英文的一下就看出了learn和forget这两个词的意思了吧。。。比如
$game_actors[3].learn_skill(32)
就是三号角色学会了32号特技。
41。变更装备
$game_actors[角色编号].equip(装备类型, 要替换的装备的编号)
装备类型0代表武器,1代表盾,2代表头部防具,3代表身体防具,4代表装饰品。比如$game_actors[4].equip(0, 2)就是四号角色的武器换为2号武器。要注意的是,和事件效果一样,如果本身就不拥有那个装备的话,是不可能装备上的。如果要卸下装备,就把要替换的装备的编号填0。
42。变更角色图形
$game_actors[角色编号].set_graphic("行走图图片", 行走图色调, "战斗图图片", 战斗图色调)
$game_player.refresh
比如$game_actors[1].set_graphic("BunnyGod-01", 0, "BunnyGod-01", 0)
就是一号角色的行走图为普通色调的BunnyGod-01,战斗图也是普通色调的BunnyGod-01。后面这个$game_player.refresh是为了立刻刷新主角的形象,不然在指令执行后是不会立刻变化的。注意,行走图和战斗图可能重复名字,但是两者是不同的东西!行走图是放在Characters文件夹之下的而战斗图则是放在Battlers文件夹之下的!
43。战斗中断
$game_temp.battle_abort = true
44。呼叫菜单画面
$game_temp.menu_calling = true
45。呼叫存档画面
$game_temp.save_calling = true
46。游戏结束
$game_temp.gameover = true
47。返回标题画面
$game_temp.to_title = true
48。暂时消除事件
$game_map.events[事件编号].erase
比如$game_map.events[1].erase就是暂时消除1号事件。
49。更改地图设置
$game_map.panorama_name = "全景图形的名字"
$game_map.panorama_hue = 数字(0-255)
$game_map.fog_name = "雾图形的名字"
$game_map.fog_hue = 数字(0-255)
$game_map.fog_opacity = 数字(0-255)
$game_map.fog_blend_type = 数字(0普通,1加法,2减法)
$game_map.fog_zoom = 数字
$game_map.fog_sx = 数字
$game_map.fog_sy = 数字
$game_map.battleback_name = "战斗背景图片名"
$game_temp.battleback_name = "战斗背景图片名"
实现事件指令中更改地图的三个属性:全景图形,雾图形,战斗背景。
比如$game_map.panorama_name = "001"
$game_map.panorama_hue = 0
就是将当前地图的全景图形改成文件名为001,正常色调的全景图形,全景图形文件都放在Panoramas文件夹里。
$game_map.fog_name = "002"
$game_map.fog_hue = 0
$game_map.fog_opacity = 128
$game_map.fog_blend_type = 0
$game_map.fog_zoom = 100
$game_map.fog_sx = 0
$game_map.fog_sy = 0
就是将当前地图的雾图形改成文件名为002,正常色调,半透明,合成方式为普通,正常大小,原点为(0,0)的雾图形,雾图形文件都放在Fogs文件夹里。
$game_map.battleback_name = "003"
$game_temp.battleback_name = "003"
就是将当前地图的战斗背景文件改成文件名为003,正常色调的战斗背景,战斗背景文件都放在Battlebacks文件夹里。也许大家会觉得这里很奇怪,为什么$game_map.battleback_name和$game_temp.battleback_name都要改,有什么区别吗?当然有区别,因为$game_map.battleback_name就是修改了地图属性,但是如果是在战斗中直接调用事件脚本,仅仅写这一行是不够的,因为战斗背景是读取$game_temp.battleback_name的,在每次战斗开始的时候都会自动让这个$game_temp.battleback_name = $game_map.battleback_name,但是在战斗中途就不会,所以必须手动修改$game_temp.battleback_name以达到立刻变幻战斗背景的效果。当然如果并非在战斗中调用,$game_map.battleback_name = "003"一行就足够了。这些和记忆BGM/BGS一样,也是可以分开来用的~~~
50。更改雾的色调
$game_map.start_fog_tone_change(Tone.new(红色调,绿色调,蓝色调,灰度),时间)
比如$game_map.start_fog_tone_change(Tone.new(255,0,0,0),20)就是在20帧的时间内把雾的色调渐变成红色。
51。更改雾的不透明度
$game_map.start_fog_opacity_change(不透明度, 时间)
比如$game_map.start_fog_opacity_change(50, 10)就是在10帧的时间内把雾的不透明度变为50。
大概就是这些了,这些都是原本事件可以实现的功能在事件脚本中的写法。大家掌握了吗?如果掌握了,我们就要进入下一部分了!向着BT的道路勇敢前进吧XDD。。。啊,又说错啦。。。应该是向着成为脚本高手的道路前进。。。
#===================================================================#
# 事件脚本扩展原有事件的功能 #
#===================================================================#
看完了之前的内容,大家可能会觉得事件脚本的用途不大,只能实现事件原有的功能,而且界面不如事件的好,有些功能设定麻烦而且还没有事件的效果好,简直就是没有作用嘛?!别急,这只是表面现象,等你深入了解后就知道事件脚本的强大了。
也许大家细心观察的话已经可以发现到事件脚本的一大邪恶功能!就是可以超出事件原有的限制或者简化复杂的事件操作!现在就让我们来看看这些功能!
1。变量的计算
我们都知道,如果要用事件来计算一个数值的话,就需要用变量来带入,而且所需要计算的数值越复杂,包含的变量就越多。比如一号变量的值=二号变量+一个随机数0到30+三号变量,用平时事件的方法就要先让一个变量代表随机数,然后用一号变量加上,然后再用一号变量加上二号变量,再加上三号变量,操作繁琐而且还浪费了一个变量做随机数。。。而事件脚本就不同,只需要这么写(如果一行连续的事件脚本长过了一行,就要用\来给该行结尾,然后下一行继续写,这两行的内容就会被当作一行来算。):
a = $game_variables[2]
b = $game_variables[3]
$game_variables[1] = a + rand(31) + b
就可以轻易算出一号变量的值,比事件操作方便易懂很多,就和数学计算一样,而且不容易出现操作失误,还节省了一个用来代入随机数的变量。而且这还可以用来做较复杂的数学运算,比如:
a = $game_variables[2]
b = $game_variables[3]
c = $game_variables[4]
$game_variables[1] = ((a.abs - Math.sqrt(b))/c).abs.round
这个就是一号变量=二号变量的绝对值-三号变量的平方根,然后用得到的值再除以四号变量,得到的结果的绝对值并且四舍五入。这个使用事件根本不可能完成的东西,但是用事件脚本却可以做到!!!当然了,这个是数学运算,所以也不能出现数学的问题,比如说负数不能开根号,0不能做被除数等。
2。代入原本变量无法代入的东西
有些东西是无法用原本的变量来带入的,比如某物品的价格,某角色学会特技的数量,队员的职业位置(前卫0,中卫1,后卫2),道具的种类数量等,但是在事件脚本中,这些东西就可以被变量代入-v-)/。
以下就是一些只有使用事件脚本才能代入的东西(太多了,不可能全都写出来只是举例写几个,其他的请自己研究,最好参看RMXP自带的帮助说明,其实那个是最好的教程)。
$data_items[物品编号].price 指定编号的物品的价格
$data_items[物品编号].scope 指定编号的物品的效果范围
$game_actors[角色编号].skills.size 指定编号的角色的学会特技数量
$data_items.size 道具的种类数量
$data_skills.size 特技的种类数量
$data_classes[$game_actors[角色编号].class_id].position 指定角色的职业位置
$data_skills[特技编号].power 指定编号的特技的威力
3。扩展的音乐功能
大家注意看,原本的事件中只有停止SE的功能,但是用事件脚本却可以制造出停止BGM,BGS,ME的功能!
比如Audio.bgm_stop就是停止BGM,Audio.bgs_stop就是停止BGS,Audio.me_stop就是停止ME。
事件只能同时记忆或还原BGM和BGS,但事件脚本却可以单独记忆或还原BGM或BGS!其实这个就是把事件原有的功能分开使用了。
4。代入角色在队伍中的位置
不知大家有没有发现,事件的功能关于角色相关操作的部分只能带入角色的编号而不能带入角色在队伍中的位置,比如队伍里的一号角色,二号角色等。而事件脚本却可以!比如$game_party.actors[0].hp就代表了队伍里面的第一号角色的HP值,$game_party.actors[3].id就代表队伍里面第四号角色的角色编号,以此类推。这样又大大增加了变量可以代入的东西。
5。独立开关的邪恶操作
原本事件里面的独立开关只能适用于当前的事件,但是如果使用了事件脚本就大大不同!
$game_self_switches[[地图编号,事件编号,"独立开关名称"]] = true/false
看到没有?可以操作不同的地图,不同的事件的独立开关!!!就是说我在地图3的第5号事件也可以控制地图6的第8号事件的独立开关!true就是打开,false就是关闭。
比如$game_self_switches[[3, 5, "A"]] = true就是打开第3号地图的第5号事件的独立开关A。但是经过我自己的尝试,我发现了几个不知原因的RP问题,不知道是我有问题还是RMXP有问题,问题就是:1。只能操作独立开关A,如果换成了其他的就没有反应,但是也没出错= =|||。2。无法关闭,独立开关无法用这个指令来关闭!虽然说理论上我的操作肯定无误,但是实践却有问题。。。不知道大家是否也会遇到?目前我只能随意操作不同或相同地图的不同事件的独立开关A打开而已。。。但功能仍然算强大,可以避免浪费开关。
6。邪恶的显示文章
默认的显示文章只可以显示文字以及变量等,但是用事件脚本却可以显示更多东西,比如当前的地图名称,某角色的HP,携带的某道具数量等。比如:
a = "一号角色的HP为" + $game_actors[1].hp.to_s + "\n"
b = "当前地图名为"
c = load_data("Data/MapInfos.rxdata")[$game_map.map_id].name) + "\n"
d = "目前携带了" + $game_party.item_number(1).to_s + "个1号道具!"
$game_temp.message_text = a + b + c + d
("\n"代表换行,.to_s代表把数字换成字符)
这样出来的对话内容就会是:
一号角色的HP为XXX
当前的地图名为XXXXXX
目前携带了X个1号道具!
是不是比原有的显示文章功能显示的东西要多呢?
7。用for loop同时关闭连续的开关,变化变量,消除图片等
如果我现在要关闭2到30号的开关,如果用事件操作的话,手估计会断掉。。。但是事件脚本却可以三行轻松解决这个问题!是哪三行?我们来看看。。。
for i in 2..30
$game_switches[i] = false
end
只要这三行,2到30号的开关就全都关闭了。。。邪恶吧。。。同样可以运用在消除图片,事件等一系列连贯的东西上:
消除1到10号图片
for i in 1..10
$game_screen.pictures[i].erase
end
很好用吧XD?!
8。突破限制
原本如果要设置角色移动速度的话最高只能设置到6(在设置移动路线的那个事件指令中),但是通过事件脚本(在设置移动路线的那个事件指令中),可以获得你想要的任何速度!
@move_speed = 20
你可以获得像这个一样的“光速”,也可以获得和
@move_speed = 0.1
一样的龟速。
而且速度是可以随意调整的,可以出现小数,这在事件操作中是无法实现的。而渐变也一样,默认的事件执行渐变,渐变的时间永远是定死的40帧(因为脚本Scene_Map里这么规定),但是如果用事件脚本,就可以获得痹烩个40帧更长或者更短的时间,因为那个时间是可以自己设定的。突破限制也同样适用于画面震动和天候设置里面的强度/速度设定。
9。立刻执行事件
可以无视触发条件,立刻执行你想要执行的事件。
$game_map.events[事件编号].start
比如$game_map.events[5].start就是立刻执行5号事件。
除此之外还有很多的扩展功能等待大家自己去发掘,其实这些功能大部分都来自于脚本中的Game系内容,大家可以自己去研究。。。这一部分的内容大家都了解了吗?我们就要进入下一部分咯!
#===================================================================#
# 事件脚本在条件分歧中的灵活运用 #
#===================================================================#
之前通过对事件脚本对原有事件的扩展功能的了解,多少明白了事件脚本的强大作用。但是!那些还不是事件脚本最最强大的地方,事件脚本最最强大的地方在于制作条件分歧!
在事件指令中的条件分歧指令里面,在最后一页可以看到脚本这个选项,别看这里给你的空间很小,其实只要你的事件脚本是一行,无论多长都是可以被接受的-v-)/。。。现在就让我们来见识一下事件脚本在条件分歧中的强大功能!
1。同时进行多个判定
如果只是用纯事件来做的话,要同时判定多个东西就必须在条件分歧里面再加条件分歧,这样看起来令人眼花缭乱,非常的不舒服。但是事件脚本就可以同时制造多个判定。
比如说我现在要判定XXX指令要在一号角色HP30以下,二号角色等级大于5,4号道具数量刚好等于5个,3号角色必须在队伍中才执行,这时候就可以在事件脚本那里写(这里的事件脚本是绝对不可能挤在条件分歧里的那个狭小事件脚本空间里,虽然绝对放得下,但那样会非常不方便看,所以建议先开一个记事本,在那里写好了然后复制粘贴进去):
$game_actors[1].hp <= 30 and $game_actors[1].hp > 5 and $game_party.item_number(4) == 5 and $game_party.actors.include?($game_actors[3])
这样就是同时满足四个条件的判定,每个不同的判定用and连接,代表必须同时满足。而
$game_actors[1].hp <= 30 or $game_actors[1].hp > 5 or $game_party.item_number(4) == 5 or $game_party.actors.include?($game_actors[3])
就代表只要满足这四个条件中的一个就可以让指令XXX执行,每个不同的判定用or连接,代表只需要满足其中的一个条件。还有
$game_actors[1].hp <= 30 and ($game_actors[1].hp > 5 or $game_party.item_number(4) == 5 or $game_party.actors.include?($game_actors[3]))
就代表说只要满足“一号角色HP30以下”和其他三个条件中的任意一个就可以让指令XXX执行,在一起的判定or要用括号扩起来,与and区分开来,不然无法正确判定。
附带写一下之前没有写过的但是在条件分歧中出现的判定:
特定角色是否在队伍中
$game_party.actors.include?($game_actors[角色编号])
特定角色名称
$game_actors[角色编号].name
特定角色是否习得某特技
$game_actors[角色编号].skill_learn?(特技编号)
特定角色的状态
$game_actors[角色编号].state?(状态编号)
2。对按键的判定
原本的条件分歧中对按键的判定都是“按住”,而不是“按下”。也就是说当这个开关被按住的这段时间里就一直满足条件,反复执行内容,而不是按一下执行一次,如果按住不放而不再次按下就不会执行。所以这时候又要用到事件脚本。
Input.trigger?(Input::按键名称)就是判定“按下”,而Input.press?(Input::按键名称)就是判定“按住”(原本条件分歧里有的就是这个),关于这里可以使用的按键名称:
A 对应键盘Z键,Shift键
B 对应键盘X键,ESC键
C 对应键盘C键,空格键,Enter键
X 对应键盘A键
Y 对应键盘S键
Z 对应键盘D键
L 对应键盘Q键
R 对应键盘W键
DOWN 对应键盘下键
LEFT 对应键盘左键
RIGHT 对应键盘右键
UP 对应键盘上键
SHIFT 对应键盘Shift键
CTRL 对应键盘Ctrl键
ALT 对应键盘Alt键
F5 对应键盘F5键
F6 对应键盘F6键
F7 对应键盘F7键
F8 对应键盘F8键
F9 对应键盘F9键
增加了很多对按键的判定。
3。判定存档的存在
我想用事件做标题的人100%懂得这个著名的指令$continue_enabled,这个是用来判断是否有存档存在的,做事件标题必须用到。如果有存档存在就满足分歧条件。
4。判定是否可通行
$game_player.passable?(x, y, 朝向)
$game_map.events[事件编号].passable?(x, y, 朝向)
比如$game_player.passable?(5, 3, 2)就表示角色在地图坐标5,3的地方的下方是否可以通行。至于这个有什么作用,就请自由发挥。
5。判定是否在移动中
$game_player.moving?
$game_map.events[事件编号].moving?
比如$game_player.moving?就表示角色是否在移动,至于这个有什么作用,就请自由发挥。
剩下的就请大家自由发挥了,因为事件脚本的条件分歧所产生的变化非常之多,不可能全部列出来,所以需要大家充分发挥自己的想象力(我用这个制作出了很多效果)来制造出自己需要的效果。到这里,本教程就结束了~~~希望对大家有所帮助,感谢大家的支持XD~~~!