RMXP脚本Ruby的语法.docx
《RMXP脚本Ruby的语法.docx》由会员分享,可在线阅读,更多相关《RMXP脚本Ruby的语法.docx(78页珍藏版)》请在冰豆网上搜索。
![RMXP脚本Ruby的语法.docx](https://file1.bdocx.com/fileroot1/2022-11/23/310d3a46-7460-455e-8e48-1de6a8486cf0/310d3a46-7460-455e-8e48-1de6a8486cf01.gif)
RMXP脚本Ruby的语法
在基础篇,将一边完成单个短程序一边解说RGSS的基础知识。
首先,来进行开始学习的准备吧。
建立工程
首先建立一个工程,把它作为学习脚本入门用的新工程。
脚本是有关游戏实际运行的数据,照原样改动制作完成的工程,一个小小的错误也将引起游戏不能正常运行。
因此,推荐使用新建的工程进行学习。
另外,RGPXP脚本数据是保存在Data文件夹内的Scripts.rxdata文件中,如果对此文件(或游戏全部数据)已经备份的话,也可以使用既存的工程。
建立组
建立工程后,在主菜单「工具」菜单中选择「脚本编辑器」。
显示脚本编辑器对话框后,在最上面新建一个组。
点击右键于弹出菜单中选择「插入」,就建立了一个新的空白组。
组的名称是什么无所谓,可以取个容易理解的,我们这里暂命名为“TEST”。
名称的输入在窗口左下方的「名称」里进行。
结束程序
首先,请输入下面的代码。
exit
注意,在Ruby中是区分字母大小写的,所以不能输入EXIT或Exit。
当然全角文字也不行。
请全部以半角的小写字母输入。
输入完毕按「确定」键关闭脚本编辑器,运行(游戏测试)看看吧。
运行游戏测试,窗口应该显示一瞬间后立即关闭。
总之,在这里写的exit是结束程序的命令。
在最上面的TEST组中写入exit,因此程序就此结束。
而在后面众多组中编写的脚本都没有执行。
以后示例程序都会省略exit,在实际测试时请在最后一行加入exit。
如果没有加入exit而运行测试,就会显示出游戏的标题画面。
注释
在Ruby中,#符号后面的一整行文字会认定为注释。
#后的注释代码不会执行,不会影响到程序的运作,只作为编写者标记的备忘记录来使用。
exit#结束程序
这和事件指令的「注释」功能相同,是记录程序处理内容的简单说明,使用注释会很容易知道这段脚本是做什么的。
即使是自己编写的程序,但时间一长,该段内容是指定做什么处理也会忘记。
在脚本的学习和实际操作时,推荐注意多使用注释功能。
还有,作为程序的说明,在后面的学习中脚本会写有很多的注释。
但实际操作中没有必要完全仿效其注释的内容。
#以后的文字,可以按实际中最容易理解的说明注释。
语法和库
程序语言在结构上大致分为语法和库两种。
所谓语法,就是使用语言记录某些处理时的规则。
与中文和英文等自然语言一样,程序语言也有语法。
例如条件分歧的语法、循环的语法等等。
「#符号后面的一整行文字认定为注释」这也是语法之一。
语言的说法,狭义上指的就是语法。
所谓库,就是字符串的处理和图片的显示等带有应用功能的语言集。
与中文英文等自然语言中的单词和词组的意思相似。
学习了英文的语法在使用英文时,增加词汇量(掌握库的使用方法)则是非常必要的。
这个「脚本入门」基础篇是以学习语法为重点。
最开始学习时或许会产生「学习语法,到底有什么用」的厌烦感,应用逻辑思维来理解基本语法就能突破最初的屏障,仔细阅读参考程序记住实际的使用方法,其实并不是多么困难的事情。
那么现在就开始吧!
是关于Ruby中数字和计算的基础知识。
作为例子将使用计算器那样简单的计算来解说。
数字
Ruby中能使用的数字,包括整数和浮点数两种。
3#整数
52#整数
-99#整数
1.5#浮点数
3.0#浮点数
所谓浮点数,就是使用小数点以下计算的数。
数值相同的话写作3是整数,而写作3.0即是浮点数。
整数计算速度快,如果不需要小数点以下的话尽量使用整数。
显示数字
即在画面上显示数字。
想显示某些数字时,使用p命令。
小写字母p,半角字符,再把想要显示的数值按顺序输入后换行。
今后会出现各种各样的命令和符号,除注释外其它一律使用半角输入。
不小心输入全角字符的话,要注意发现错误。
p3
这个p命令可以在排除程序故障时使用,学习显示数字将会是十分有用的。
运行这个程序,会看到在弹出的对话框中显示3。
原本p不是显示对话框的命令,但是游戏开发时特殊化的RGSS在没有其它输出地点时就会自动显示对话框。
计算方法
在Ruby上进行计算吧。
p1+1#加法
p10-3#减法
p7*5#乘法
p24/4#除法
这样,写上普通算式就会输出计算的结果。
+和-等符号称为运算符。
另外还有乘法的*和除法的/。
不熟悉的人,一定要记住这些重点。
优先顺序
和普通的算式一样,*和/计算要优先于+和-计算。
想改变这个顺序就要使用括号(),括号中的算式将会优先计算。
p2*2+3*4#=>16
p2*(2+3)*4#=>40
p2*(2+3*4)#=>28
按优先顺序,示例第一行其实是4+12,第二行是2*5*4,第三行是2*14,所以会是不同的计算结果。
括号还可以多层重叠起来(即使是二层三层的情况也是使用同一个符号)。
还有,示例程序的注释中使用=>符号,主要是表示这行的输出结果。
这是为了方便直观的理解而做的说明。
小数点以下的计算
整数除整数的情况下,会省略余数,答案将还是整数。
想得到小数点以下的答案,就要使用到浮点数。
除数或被除数至少要有一个是浮点数(明确标明了小数点以下),计算的答案就会是浮点数。
p15/4#=>3
p15.0/4#=>3.75
p15/4.0#=>3.75
余数的计算
求余数(除法的余数),是使用%符号。
p14%4#=>2
p13%4#=>1
p12%4#=>0
运行示例第一行的算式,是求14除以4的余数,就会输出计算结果2。
乘方的计算
没必要强迫记住,乘方(同一个数指定次数的相乘)是使用**符号。
p2**4#=>16
这个示例求2的4次方,也就是计算2*2*2*2。
所谓变量,就是某些数值附上名称。
是相对于常量的数据类型。
变量的命名
变量命名的管理。
我们可以为变量取比如x和y或者更长的像level或gold这样的名称。
名称的长度没有限制。
变量有几个类型,首先我们来学习最基本的局部变量。
局部变量的命名规则有以下几点。
其中的第1条应该特别注意。
1.第一个字符必须以小写英文字母或_(下划线)开头。
2.第二个字符开始可以使用英文字母、数字或_(下划线)。
3.不能使用保留字作变量的名称。
保留字是作为Ruby中具有特殊意义的词而被系统所「保留」,所以变量名称不能使用。
以下就是系统的保留字。
aliasdeffalsenilreturnunless
anddofornotselfuntil
beginelseiforsuperwhen
breakelsifinredothenwhile
caseendmodulerescuetrueyield
classensurenextretryundef
除上面列出的保留字以外,其它的词都可以作变量的名称。
赋值和引用
在实际中使用变量看看吧。
x=3
y=4
px+y#=>7
第一行和第二行是进行变量的赋值。
其中=号是赋值运算符。
和数学上使用等号表示「左边等于右边」的意思不同,这里表示「左边的变量代入右边的数值」。
在上述示例中,第一行x变量和第二行y变量分别代入数值3和4。
第三行是引用变量x和y。
所谓引用就是取得那个变量的数值。
变量的计算和数字的计算方法完全一样。
这里的x+y可以解释为3+4,计算结果就为7。
另外,引用从未进行赋值的局部变量,就会使程序出现错误。
pzzz#ERROR!
!
请记住,变量一定要进行赋值后才能使用。
zzz=5
pzzz#=>5
这个示例中,第一行变量zzz为其赋值代入5后,第二行引用。
自运算
变量引用自己的数值,并再次代入计算结果称为自运算。
x=1
x+=7
x-=3
x*=2
px#=>10
第二行的x+=7相当于x=x+7,总之就是向变量x里加上7。
同样-=、*=、/=、%=等也是如此使用。
这些运算符就是自运算运算符。
RPGXP的变量进行自运算计算处理时思考方法都相似。
这个示例中第一行是赋值直接代入1,第二行加上7,这时x的值其实是8,第三行减去3,第四行再乘以2,最后的计算结果就是10。
全局变量
局部变量是暂时使用的变量,只能在函数和类等定义(在后面讲述)内部使用,之外变量就无效。
与之相对,在程序任何地方都能引用的就是全局变量。
全局变量可以在程序中任何地方使用,名称相同,就必然是同一个变量。
如下面的示例,以$号开头的变量就作为全局变量使用。
赋值方法和局部变量完全相同。
$global
虽然在任何地方都能引用,但使用全局变量不一定比局部变量好。
全局变量十分强大,胡乱使用恐怕会使程序变得很难懂。
请在使用时注意。
一般来说,由文字连接起来的数据就称为字符串。
print
双引号""或单引号''中间的部分,就作为字符串数据使用。
p"RPGMakerXP"#=>"RPGMakerXP"
p'RPGMakerXP'#=>"RPGMakerXP"
p命令会导致双引号和字符串一起输出,所以使用print命令代替。
print"RPGMakerXP"#=>RPGMakerXP
这次双引号就没有了。
p是按照人们容易理解的形式来显示的命令,所以它会加上双引号来强调字符串。
print和p相似,但它只显示字符串本身。
为变量赋值
和数字一样,字符串也能代入变量为该变量赋值。
a="RPGMakerXP"
printa#=>RPGMakerXP
字符串也能作加法,字符串加上字符串,就会得到一个连接起来的字符串为答案。
a="我的"
b="RPGMakerXP"
printa+b#=>我的RPGMakerXP
还可以作乘法,字符串乘以一个整数,就会得到该整数次重复的字符串为答案。
a="RPGMakerXP"
printa*2#=>RPGMakerXPRPGMakerXP
控制码
字符串中的\符号,是作为一段连续文字中换行等操作使用的特殊文字。
比如\n是表示换行。
控制码有\t(Tab)和\s(空格)等多种代码,另外\n表示换行,重叠起来的\\表示\文字本身,这两个一定要记住。
a="RPGMakerXP"
b="\\10,290"
printa+"\n"+b#=>RPGMakerXP
#\10,290
单引号''中间的字符串,除\\(\符号本身)和\'(单引号)外不能使用任何的控制码。
这在打算原样显示文字本身的情况下使用会十分方便。
print'RPGMakerXP\n'#=>RPGMakerXP\n
\符号本身即为计算机内部的控制码。
以后实际字符串操作中应注意正确使用。
内嵌表达式
在字符串里面,可以用#{变量名}的形式把变量的内容嵌入在字符串当中。
game="RPG"
print"#{game}MakerXP"#=>RPGMakerXP
上述示例里,第一行是为game变量赋值代入字符串“RPG”。
第二行里面,其中#{game}是表示直接嵌入变量game的值字符串“RPG”,和后面的“MakerXP”组合在一起,从而输出一个新的字符串。
RPGXP的事件指令「显示文章」里,在文章中使用\V[n]和\N[n]控制码可以把变量的值和角色的名称作为信息嵌入文字中,这个功能好像和那个十分相似。
这个功能,让我们举例来说明在预置脚本中应如何使用。
print("文件#{filename}没找到。
")
print的显示内容应附加上括号(),如果其优先顺序不易混淆的话可以省略(本章print的使用示例介绍中全部省略了括号)。
预置脚本中基本上都统一使用有括号,所以在这儿也加上一个。
这个是当然,
print("文件"+filename+"没找到。
")
像这样写也可以,使用内嵌表达式的方法会使读取程序变得很容易。
另外内嵌表达式和控制码一样,在单引号''中间的字符串里使用也会无效。
满足特定的条件与否,之后的动作会根据其不同而改变就叫作条件分歧。
比较运算符
在具体地学习处理条件分歧的方法之前,要先记住条件构成中使用的运算符。
下面6个运算符称为比较运算符。
使用这些运算符,和给予的条件(数字和字符串)相比较,然后返回结果。
==
相等
!
=
不相等
<
小于
>
大于
<=
小于或相等
>=
大于或相等
这里一定要注意的是,判断相等的运算符不是=而是==。
像已学习过的那样,所谓=符号表示的不是比较而是代入。
请注意不要弄混淆了。
真伪值
比较运算的运算结果就称为真伪值。
有真(正确)、伪(错误)两种情况。
比较后是正确的话为true值,是错误的话就为false值。
请试试看吧。
p("早安"=="早安")#=>true
p("早安"=="晚安")#=>false
p(3+1==3+5)#=>false
p(3+1==2+2)#=>true
逻辑运算符
下面6个运算符称为逻辑运算符。
and
&&
「~,与,~」的意思
or
||
「~,或,~」的意思
not
!
「非~」的意思
英文单词运算符和符号运算符,无论用哪个都是一样的。
在预置脚本中运用的主要是英文单词。
使用这些逻辑运算符就能指定更加复杂的条件。
p(100>77and1+1==2)#=>true
p(100>77&&1+1==2)#=>true
上述示例中,第一行和第二行表示的都是一个内容「100大于77同时1+1等于2」。
不用说100是比77大的整数,1+1答案也为2,两个运算都成立。
所以输出结果就为true(真,正确)。
那么,看下一个算式吧。
p(1+1==3or2+2==3)#=>false
p(1+1==3||2+2==3)#=>false
上述示例中,第一行和第二行表示的也都是一个内容「1+1等于3或2+2等于3」。
很显然,1+1不等于3,2+2也不等于3,这样两个运算都不成立。
比较运算符or(||)是只要有一个运算成立就为ture(真,正确),而这里两个运算全都不成立,所以输出结果就为false(伪,错误)。
另外,not(!
)和上面的例子稍微有些不同,not(!
)表示的内容为后面的条件不成立。
可以理解为颠倒true或false的运算符。
p(nottrue)#=>false
p(!
true)#=>false
上述示例中的内容是「非true」的意思,所以输出结果为false。
if~elsif~else~end
if~end语句是条件分歧的句法。
这个和英文的if(如果~就)意思相同,表示「如果if后面的条件成立的话,就运行下面的处理」的意思。
下面示例中的3~5行就是条件分歧。
a=20#为变量a赋值代入20。
ifa>=10#如果a为10以上的话,
print"big"#显示big。
end#分歧结束。
在条件不满足时也要进行处理的情况下就使用else,条件不满足但指定另一个条件的情况下就使用elsif。
a=7#为变量a赋值代入7。
ifa>=10#如果a为10以上的话,
print"big"#显示big。
elsifa>=5#除此之外,如果a为5以上的话,
print"medium"#显示medium。
else#其他,
print"small"#显示small。
end#分歧结束。
unless~end
与if相反,在条件不满足时才进行某些处理的情况下使用unless语句。
a=7#为变量a赋值代入7。
unlessa>=10#如果a不为10以上的话,
print"small"#显示small。
end#分歧结束。
case~end
在条件为特定的变量值进行分歧的情况下使用case语句会更方便。
a=0#为变量a赋值代入0。
casea#分歧开始。
when0#当a为0时,
print"零"#显示零。
when1#当a为1时,
print"壹"#显示壹。
when2#当a为2时,
print"贰"#显示贰。
end#分歧结束。
把第一行a=后面的0改为1和2,然后再来看看分歧的结果吧。
当a代入1时会显示“壹”,代入2时会显示“贰”。
条件运算符
使用符号?
和:
也是运算符形式的条件分歧语句。
a=3
p(a>=10?
"big":
"small")#=>"small"
这个示例的意思是,变量a的值在10以上的话就显示"big",9以下的话就显示"small"。
条件运算符的语法是「条件?
真时的值:
伪时的值」。
上述的条件是a>=10,真时的值为"big",伪时的值为"small",会根据条件是否满足来决定使用?
或:
的值。
当然使用if语句也能完成同样的事情。
a=3
ifa>=10
p"big"
else
p"small"
end
使用if语句的语法会像上面写的那样,但是使用条件运算符语句会更加简洁。
该语句在当前的脚本中也使用得很多,所以最好事先记住。
重复进行特定的处理就要使用循环。
while~end
在满足特定条件期间进行循环的情况下使用while语句。
a=0#为变量a赋值代入0。
i=1#为变量i赋值代入1。
whilei<=5#当变量i为5以下时循环开始(重复以下处理),
a+=i#变量a加上i的值。
i+=1#变量i的值增加1。
end#循环结束。
pa#显示计算结果。
这个示例是求从1到5这五个数字总和的程序。
在这里,变量i是用来产生从1到5这五个数字用的。
当然变量名也可以不用i,一般情况下循环处理用的变量会使用i、j、k为名称。
那么,这个程序最重要的是i+=1这行。
如果没有这行i的值永远为1,而i<=5的条件也会一直满足,就会成为无限循环。
因此,这里每次都向i加上1使得i的值依次变为2、3、4、5、6从而使得循环结束。
变量a和i的数值变化,如下表所示。
循环
a的值
i的值
初始状态
0
1
1次后
1
2
2次后
3
3
3次后
6
4
4次后
10
5
5次后
15
6
循环5次后,在a的数值里面实际上进行了1+2+3+4+5的计算,i的值也超过了5而执行end使得循环结束。
然后以p命令显示最终a的值,就会显示出答案15。
变化范围
数值的范围,例如类似于「从1到5」这样的概念就称为变化范围。
1..5
上述示例表示「从1到5」的意思。
使用..运算符,就能作成一个变化范围。
而且,使用...运算符也可以。
1...5
和..不同的是「不含最后一个数」。
所以,这种情况实际上表示的是「从1到4」的意思。
for~in~end
想在变化范围表示的范围内循环的情况下使用for语句。
a=0#为变量a赋值代入0。
foriin1..5#变量i的值按从1到5的范围变化,
a+=i#变量a加上i的值。
end#循环结束。
pa#显示计算结果。
这个示例和使用while语句的示例完全相同,也是求从1到5这五个数字总和的程序,但比使用while的情况更加简洁。
在while中变量i加上1表示的是从1到5的范围,然而在for中是用变量i按「从1到5的范围」的顺序代入来表示。
表面看起来不同,但实际上进行的是意思完全相同的处理。
Ruby中有许多语法,循环中也存在各种各样不同的方法。
在不同语法使用中,请按照这个示例提示的「让编写更简便」的方式来思考。
实际上,如果理解了条件分歧和循环的话,就能进行大部分逻辑运算了。
loopdo~end
未指定循环次数和条件的情况下,也就是想进行无限循环时使用loop语句。
这个与while和for语句的性质稍微有所不同,一般情况下没有必要注意。
i=0#为变量i赋值代入0。
loopdo#循环开始。
i+=1#变量i的值增加1。
pi#显示变量i的值。
end#循环结束。
这个示例是「一边把i的值加上1,一边显示i的值」的程序,没有结束条件。
一旦运行的话就会连续显示1、2、3……。
如果这种对话框不断显示的话,就算要结束程序也是不可能的,只能按着F12键不放强行关闭对话框,并点击右上方的结束按钮关闭程序。
break
想中途中断循环就要使用break命令。
i=0#为变量i赋值代入0。
loopdo#循环开始。
i+=1#变量i的值增加1。
ifi==5#如果变量i的值为5的话,
break#中断循环。
end#条件分歧结束。
pi#显示变量i的值。
end#循环结束。
上述示例在程序中加上了「i等于5的就中断循环」的条件。
运行该程序,显示1、2、3、4就结束了。
break即使在while和for等其它方法作成的循环中也能使用。
next
在不中断循环的情况下,跳过本次循环而进入下一次循环时使用next命令。
foriin1..5#变量i的值按从1到5的范围变化,
ifi==3#如果变量i的值为3的话,
next#进入下一次循环。
end#条件分歧结束。
pi#显示变量i的值。
end#循环结束。
运行这个示例,会显示1、2、4、5。
数字的计算和字符串的显示等,能够进行某种处理的被命名的功能称为函数。
函数的使用
我们一直在使用的exi