当前位置:首页 > RMXP初初级脚本教程
D、让1号变量等于:―考生姓名:【5号角色姓名】 考生职业:【5号角色职业】‖
(提示:n号角色的职业参数为$game_actors[n].class。另外空格也可以作为字符串来使用,只要加上双引号。)
(本题参考答案:$game_variables[1] = \考生姓名:【\
$game_actors[5].name + \】 考生职业:【\】\)
【脚本里的条件分歧指令】
分歧语句在脚本里的重要性就像『条件分歧』在事件指令里一样。如果想要自己定制系统,掌握这类语句的用法是基础中的基础。以下我们介绍几类最常见的条件分歧语句,然后依次来练习它们的用法。
(提示:从这部分起你可以打开F1的帮助手册,找到『脚本入门——基础篇
——条件分歧』参考着一起看。帮助手册对这部分的解说还是很简明易懂的。)
1、if分歧语句及运用
打开脚本编辑器找到Scene_Title,12行开始你能看到这样一小段:
# 战斗测试的情况下 if $BTEST battle_test return end
在这里,if~end就是一个条件分歧,表示『当……的时候,执行……;完
毕。』——即是说,当if后面的条件被满足的时候,执行所有end前面的内容。在这个例子里,$BTEST是一个全局变量,当我们执行数据库里的战斗测试时该变量为真,那么游戏窗口就会直接执行『battle_test』(测试战斗)这个指令,而不是显示标题画面等。你可以注意到这和事件指令里的条件分歧格式几乎是一模一样的,只不过相对事件指令,你可以在if后面放上各种各样你自己定制的条件,然后在end前写上一旦这些条件满足,将执行什么。 接下来我们继续看Scene_Title第55行的内容:
# 无效的情况下、继续的文字显示为灰色 if @continue_enabled
@command_window.index = 1 else
@command_window.disable_item(1) end
在这里我们注意到,在if和end的中间多了一个else。这就和事件指令的条件分歧里『除此以外的场合下』是一样的,整个语句表示『当……的时候,执行……;否则执行……;完毕。』。如果你想要设计出条件不满足的情况下另
外还要发生什么,就加上这个else表示『否则』的情况,并在其之下添加执行内容。这段脚本的其他语句可以暂时不用管是什么意思,但是要记得if~else~end的这个格式。
另外还有一点要补充的是,对于『否则』的场合下,如果用事件操作就只能表示除了满足条件外的全部情况,即只有『A』与『非A』的两种分歧。但在脚本里,你可以在『非A』的情况下再增加『非B』等情况——这就要用到elsif这个语句。例如:
if $game_variables[1] >= 1 $game_switches[1] = true elsif $game_variables[1] >= -5 $game_switches[2] = true else
$game_switches[3] = true end
对上面这个条件分歧的解说是:当1号变量大于等于1时,打开1号开关。除此以外(1号变量小于1时),当1号变量又大于等于-5时,打开2号开关。再除此以外(1号变量小于-5)时,打开三号开关。完毕。
这样分歧较多的的内容也可以直接用这种方式写出来了。elsif可以不停地接下去,比如你要是再加一句elsif $game_variables[1] >= -10的话,就会再增加一个当1号变量大于等于-10但小于-5的场合。如果用事件或者普通的if来做的话,就要在『除此以外的场合』里再嵌套条件分歧了。所以elsif的作用是很大的,也能让你的条件分歧更有条理性。
快速提问:在上面的实例里,分别回答出当1号变量等于4、等于0、等于-2、等于-15时,分别是哪个开关打开了?
(答案:1号开关、2号开关、2号开关、3号开关。)
上面既然写到了关于判断变量大小的语句,那么就顺便再提一句关于判定数值大小的符号问题。当你要把某个变量与另一个值比较时,『>=』表示大于等于,『<=』表示小于等于,『>』表示大于(超过),『<』表示小于(未满),『!=』表示不等于(以外),『==』(←双等号注意)表示等于。再次强调,判断某变量是否等于一个值要用双等号而不是单等号,一个等号的作用是『赋值』,是不能用在条件分歧里来判定相等与否的。另外在写脚本的时候,保持你的输入法一直是英文输入法。用全角的标点符号肯定要出错。
示例:
1号变量是否大于5:if $game_variables[1] > 5 5号开关是否打开:if $game_switches[5] == true 当前金钱数是否不为零:if $game_party.gold != 0
2号主角姓名是否为『两仪式』:if $game_actors[2].name == \两仪式\
务必注意判定某变量是否等于什么或某开关是否开启关闭的时候,所用的一定是双等号。千万不能写错成单等号—--
——重要的事我得说三遍(……
下面我们做个简单的例子。当1号角色的HP值低于100的时候,按ESC将打不开主菜单。这个用并行公共事件也可以做,不过写脚本会更方便。找到Scene_Map,202行开始有这么一段:
#-------------------------------------------------------------------------- # ● 调用菜单
#-------------------------------------------------------------------------- def call_menu
# 清除商店调用菜单标志
$game_temp.menu_calling = false
# 已经设置了菜单 SE 演奏标志的情况下 if $game_temp.menu_beep # 演奏确定 SE
$game_system.se_play($data_system.decision_se) # 清除菜单演奏 SE 标志
$game_temp.menu_beep = false end
# 矫正主角姿势
$game_player.straighten # 切换到菜单画面
$scene = Scene_Menu.new end
我们要在这里加上一个分歧,让菜单画面无法切换。
可以看到注释里『切换到菜单画面』这一行的脚本是『$scene =
Scene_Menu.new』,那么我们要让这个语句只在1号角色的HP大于100时执行。于是它就要装在条件分歧的执行部分,而前面则要加上if的条件限制:
if $game_actors[1].hp > 100 $scene = Scene_Menu.new end
将其改成这样子,保存退出后进行测试吧——让1号角色的HP小于100后,按ESC就无法弹出菜单了。如果你连按键的音效都要消除的话,把这个if再提前一点,放在 if $game_temp.menu_beep的上面,那么连按键音效都会没有了。
练习题A:如果想要让1号角色HP小于100的时候,按键时无法弹出菜单但同时再播放一个警告的音效,如何操作呢? (提示:播放警告音效的语句是
$game_system.se_play($data_system.buzzer_se)。)
练习题B:找到Window_MenuStatus,定义窗口大小的语句部分(忘记的去回顾第一章)。利用if条件分歧判定,当队友数目只有1人时,窗口为目前的
1/4那么高;队友数目为2人时,窗口为目前的1/2高;队友数目为三人时,3/4高;除此之外窗口保持原来的高度。(队友数目的变量前面有相关语句可以回去找找看)
2、unless分歧语句及运用
依然是回到Scene_Title。148行开始—--
# 继续无效的情况下
unless @continue_enabled # 演奏无效 SE
$game_system.se_play($data_system.buzzer_se) return end
在这里你就可以看到unless~end的运用。它的指令和if是正相反的,表示『当……不成立时,执行……;完毕。』在这里@continue_enabled其实是『可以继续/继续有效』的意思(enable在英文里的意思是『使能够』),但是前面加上了unless之后,整个语句就是在判定『当继续无效』或者说『除非继续有效,否则』的情况。unless用得最多的情况就是去判断一个开关,或者只有真/否两种可能的变量(通常情况下这也算是一种开关)是否关闭。因为我们前面也讲过,在大多数情况下,只要我们没有刻意写过让开关打开的指令,它们都是关闭着的。
所以假如我们要写1号开关关闭的情况下1号角色的姓名赋为『阿尔西斯』,就可以直接写:
unless $game_switches[1]
$game_actors[1] = \阿尔西斯\ end
在这里,如果只在条件里写$game_switches[1]的话,其意义和
$game_switches[1] == true是一样的。也就是说,这个判定的完整形式是unless $game_switches[1] == true。整个语句可以解读为:『除非1号开关打开;否则1号角色的姓名为阿尔西斯;完毕。』
看起来可能没有if那么直接和直观,但是由于上面提及的,大多数情况下开关都是关闭的,所以用这种条件分歧包括的就是『通常情况下』的事。当然你也可以用if $game_switches[1] == false来判定,效果是一模一样的。
unless语句也可以用else来表示『除此以外』的情况,不过elsif就不能用在这里了这一点要注意。在上面的实例里如果写成 unless $game_switches[1]
$game_actors[1] = \阿尔西斯\ else
$game_actors[1] = \奥斯卡\ end
共分享92篇相关文档