注册会员 登录
Project1 返回首页

侨中战记Ⅰ官方网站 https://rpg.blue/?79731 [收藏] [复制] [分享] [RSS] 梦想世界,在你手中……

日志

RMXP事件命令脚本化 参考手册

已有 747 次阅读2011-11-4 21:23 | 参考手册

=begin
BY 柳柳
先声明:这个不是教学,你可以把它当作查询手册。(写死我了……)。如果有你需要的脚本而这里没有收录,请到留言板提出,谢谢!
使用方法:由于高级教学栏目有防盗措施,所以你没法直接选择后拷贝粘贴。不是说估计刁难人,这是和我推荐的学习方法有关= =你需要哪个就自己找一下,或者用ctrl+f搜索一下,自己在事件里面打1、2遍,以后这个知识就是你自己的了。如果每次都ctrl+v ctrl+v,什么时候才能学会呢?
显示文章:
$game_temp.message_text= ""
显示引号中的文章。
更改文章选项:
$game_system.message_position =0,1,2
表示上、中、下,三个位置
$game_system.message_frame = 0 ,1
0表示不透明,其他的话就透明
等待:
@wait_count = X
等待X帧
中断事件处理:
command_end
把某一个事件暂时消除
$game_map.events[X].erase
其中X表示把X号事件暂时消除,如果是消除本事件X = @event_id
执行公共事件:
$game_temp.common_event_id = 编号
执行编号的公共事件。注意,这个执行和直接在事件中的公共事件有微妙区别。
开关操作:
$game_switches[编号] = true / false
true是打开,false是关闭
变量操作:
$game_variables[编号] = 数值
这里有一些常用的内容:
rand(100):返回0-99的随机数
rand(100)+10000:返回10000-10099的随机数
$game_party.item_number(编号):编号物品的个数
角色相关:以下为某编号的角色的相关属性
生命:$game_actors[编号].hp
精神:$game_actors[编号].sp
经验:$game_actors[编号].exp
等级:$game_actors[编号].level
最大生命:$game_actors[编号].maxhp
最大精神:$game_actors[编号].maxsp
力量:$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_actors[编号].name
职业编号:$game_actors[编号].class_id
职业名称:$game_actors[编号].class_name
武器编号:$game_actors[编号].weapon_id
防具1编号:$game_actors[编号].armor1_id
防具2编号:$game_actors[编号].armor2_id
防具3编号:$game_actors[编号].armor3_id
防具4编号:$game_actors[编号].armor4_id
完全回复:$game_actors[编号].recover_all
领悟特技:$game_actors[编号].learn_skill(编号)
遗忘特技:$game_actors[编号].forget_skill(编号)
位置(前卫返回0,中卫返回1,后卫返回2):$data_classes[$game_actors[编号].class_id].position
学会特技总数:$game_actors[编号].skills.size
敌人:$game_troop.enemies[编号]
敌人拥有角色的部分功能,包括.hp,.sp,.maxhp,.maxsp,.str,.dex,.agi,.int,.atk,.pdef,.mdef,.eva
地图的事件属性:
$game_map.events[编号].x,$game_map.events[编号].y
编号事件的x,y坐标
$game_map.events[编号].screen_x,$game_map.events[编号].screen_y
编号事件的屏幕x,y坐标
$game_map.events[编号].direction
编号事件的朝向
$game_map.events[编号].terrain_tag
编号事件所处的地形标志
$game_map.events[编号].moveto(x,y)
把事件扔到(x,y)
——————————————————以上几个事件的,如果要求为角色,则为“$game_player.x”等
地图ID:$game_map.map_id
同伴总人数:$game_party.actors.size
步数:$game_party.steps
金钱:$game_party.gold
游戏总时间(秒数):Graphics.frame_count / Graphics.frame_rate
游戏总帧数:Graphics.frame_count
游戏帧速率(可直接=n调整):Graphics.frame_rate
计时器剩余秒数:$game_system.timer / Graphics.frame_rate
存档次数:$game_system.save_count
独立开关操作:
$game_self_switches[[地图编号,事件编号,"A"]] = true/false
把地图编号的地图上的事件编号的事件的A开关打开。其实不光ABCD,还可以建立更多独立开关,不过调用也得用同样脚本。
计时器打开:
$game_system.timer = 需要的秒数;$game_system.timer_working = true
计时器关闭:
$game_system.timer_working = false
增减金钱:
$game_party.gain_gold(金钱量)
增减物品:
$game_party.gain_item(物品编号,数量)
举例:
$game_party.gain_item(rand(10),rand(10)):随机获得0-9号中某一物品,数量为0-9随机。
增减武器:
$game_party.gain_weapon(物品编号,数量)
增减防具:
$game_party.gain_armor(物品编号,数量)
清空现有所有物品:
$game_party.items.clear
清空所有武器:
$game_party.weapons.clear
清空所有防具:
$game_party.armors.clear
角色替换:
加入角色:$game_party.add_actor(编号)
删除角色:$game_party.remove_actor(编号)
初始化角色:$game_party[编号].setup(编号)
更改窗口外观:
$game_system.windowskin_name = 文件名
更改禁止存档
$game_system.save_disabled = true/false
更改禁止菜单:
$game_system.menu_disabled = true/false
更改禁止遇敌:
$game_system.encounter_disabled = true/false
地图卷动:
$game_map.start_scroll(方向,距离,速度)
地图某角色显示动画:
$game_map.events[id].animation_id = 动画编号
角色透明:
$game_player.transparent = true/false
等待移动结束:
@move_route_waiting = true
开始更改色调:
$game_screen.start_tone_change(Tone.new(R,G,B,A),帧数)
画面闪烁:
$game_screen.start_flash(Color.new(R,G,B,A),帧数)
画面振动:
$game_screen.start_shake(力度,速度,帧数)
显示图片:
$game_screen.pictures[number].show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
移动图片:
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
其中:
#     name         : 文件名
#     origin       : 原点
#     x            : X 坐标
#     y            : Y 坐标
#     zoom_x       : X 方向放大率
#     zoom_y       : Y 方向放大率
#     opacity      : 不透明度
#     blend_type   : 合成方式
#     duration     : 时间
旋转图片:
$game_screen.pictures[number].rotate(速度)
删除图片:
$game_screen.pictures[number].erase
显示动画(战斗中)
battler.animation_id = 动画编号
battler可以是敌人或者自己人,请先定义。
显示伤害:
battler.damage = 伤害值
battler.damage_pop = true
注意,这个显示伤害可以让伤害值为字符串!并不会真的减血,减血用battler.hp -= 数值
battler.criticle = true 这个还可以打开会心一击标志
战斗中断:
$game_temp.battle_abort = true
调用菜单:
$game_temp.menu_calling = true
调用存档画面:
$game_temp.save_calling = true
游戏结束:
$game_temp.gameover = true
返回标题画面:
$game_temp.to_title = true
强行启动事件:
$game_map.events[编号].start
通行判定:
$game_player.passable?(x,y,方向)
用来判断地图某处是否在某个方向可通行
正在移动判定:
$game_player.moving?
$game_map.events[编号].moving?
播放效果:
Audio.bgm_play("文件名",音量,节奏速度)
Audio.bgs_play("文件名",音量,节奏速度)
Audio.me_play("文件名",音量,节奏速度)
Audio.se_play("文件名",音量,节奏速度)
播放bgm,bgs,me,se
Audio.bgm_stop
Audio.bgs_stop
Audio.me_stop
Audio.se_stop
停止播放bgm,bgs,me,se
$game_system.playing_bgm,$game_system.playing_bgs
获得演奏中的bgm,bgs
game_system.bgm_memorize,game_system.bgm_restore
game_system.bgs_memorize,game_system.bgs_restore
记忆、还原bgm,bgs
判断某角色在队伍中:$game_party.actors.include?($game_actors[编号])
判断是否学过某特技:$game_actors[编号].skill_learn?(特技编号)
按下某键的时候:Input.press?(键),Input.trigger?(键)
这两个请参考脚本中的其他定义推理
[RMXP]事件功能扩展,事件脚本手册
[code]
#===================================================================#
#                  Bunny神的RMXP事件脚本实用小手册                  #
#===================================================================#
(\__/)                  作者:Team Bunny God                    (\__/)
("=.=)      版权所有:http://bbs.rpgchina.com 幻想森林论坛      (=.=")
( ~  )~        可以随便转载,不过请保留版权信息完整~~~        ~(   ~)
#===================================================================#
#                          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[角色编号].int          指定编号的角色的魔力
$game_actors[角色编号].atk          指定编号的角色的攻击力
$game_actors[角色编号].pdef          指定编号的角色的物理防御
$game_actors[角色编号].mdef          指定编号的角色的魔法防御
$game_actors[角色编号].eva          指定编号的角色的回避修正
$game_troop.enemies[敌人编号].hp 指定编号的敌人的HP,角色的一些资料可以同样用在敌人身上(哪些才能用应该看得出吧= =|||),比如sp,str,dex等等。
$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~~~!

鸡蛋

鲜花

评论 (0 个评论)

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 00:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部