rmxp团队吧 关注:806贴子:10,012

RMXP脚本基础教程

只看楼主收藏回复

早就有挖坑的想法了,就从现在开始吧。本篇教程应该非常枯燥,讲解内容完全是最初级的概念,也就是变量,循环等内容。最关键的是这些个东西一开始基本上看不出什么成效来…………废话不多说,开讲。
The Dawn - Dreamtale


IP属地:上海本楼含有高级字体1楼2015-03-23 20:58回复
    0.开始之前
    首先,确保你已经熟悉如何使用脚本,也就是最起码知道脚本是什么~
    RMXP中的脚本语言被称为RGSS1,是经过特殊处理化的Ruby语言。这个语言十分简单易学,在编写脚本的时候通常也不需要太高的技术。
    请新建一个工程作为你的脚本学习工程吧,不然玩坏什么的不关我的事哦~


    IP属地:上海2楼2015-03-23 21:14
    收起回复
      1.exit,p,print命令与注释
      (首先声明,exit,p,print并不应该叫做命令,而是应该叫做方法,以后会提到,但是目前先称为命令)
      打开你的脚本编辑器,在你眼前的是一堆Xxx_Xxxx的脚本,请先在最上方的Game_Temp的上面建立一个空白的脚本页。然后输入exit,保存并运行。结果就是:游戏窗口开了一下又关了。这就是exit命令的作用——退出。p命令和print命令非常像,都是在屏幕上弹出一个窗口用来显示一些东西,常常用来调试脚本。输入p 123就会看到弹出了123,输入p "小周"(一定要加英文引号)就弹出了小周。print也有相同的作用,但和p也有所不同,这里不再深入。最直观的不同就是p连引号一起输出了,print却没有输出引号,以后需要使用一般都是用p命令。注释也是非常的简单,有两种注释。一种是输入#,后面的文字都变绿了,这就代表是注释,没有实际意义(在字符串中#号不会作为注释,以后会提及)。比如我可以这么写:
      p 11 # 弹出11
      exit # 退出
      还有一种注释叫做“群注释”是这样的:
      =begin
      哈哈哈哈哈啊
      哇哇哇哇
      =end
      =begin和=end之间的全部算作注释,但是它们一定要顶格写!
      本节到这里就结束了,然后是一些所谓“课后作业”的东西。
      ①用p输出1加2的结果
      ②用p输出“RMXP太好用啦!”


      IP属地:上海本楼含有高级字体3楼2015-03-23 21:26
      收起回复
        支持小周


        IP属地:山东来自Android客户端4楼2015-03-24 21:29
        收起回复


          IP属地:英国5楼2015-03-24 23:59
          收起回复
            2.p命令计算、整数和浮点数
            上部分内容的课后作业十分简单,所以不上答案了~
            p命令可以直接输出运算的结果,比如p 1 + 8 +2,弹出的数字就是11了。
            RGSS中,常见的运算符号有+、-、*、/、%、**这几种。
            加减乘不必我多说,先来谈谈/。/就是除法,比如p 3/1输出的就是3。值得说明的是,如果输出10 / 3,那么得到的答案就是3,而不是3.3333循环。这里就要涉及到整数和浮点数这两个概念了。整数就是1,2,3这种数字,浮点数则是带小数点的数,1.0是浮点数而1是整数。在RGSS的除法运算中,被除数或除数一定要有至少一个是浮点数才会得出带小数点的结果,否则则会取整数。浮点数的运算速度比整数慢,因此请尽量使用整数。%是取余数的运算,比如5%2得到的就是1,它常常被用来判定某数是否是某数的倍数。**也很简单,举个例子,2**3就是2*2*2,也就是8。
            本节就到这里结束了,然后是课后作业。
            ①自己尝试进行各种运算。


            IP属地:上海本楼含有高级字体7楼2015-04-04 11:59
            回复
              好久没更新了啊……


              IP属地:上海8楼2015-04-04 12:00
              回复
                插课. if及case的简单应用
                if 和 case都是用来进行判定的语言,也是整个脚本系统中简单但又必不可少的一部分。对于这两者,在使用时有一些简单的格式规定需要遵循。(PS:可能打着打着有个单词拼错了之类的,别吐槽……)
                不同于C# (不要念“井”了……)的括号范围,ruby之中的if和case都必须要有end来决定范围。
                if
                #内容
                end
                以及
                case
                #内容
                end
                如果没有与之对应的end,那么就会报错。
                在正式认识这两个单词之前,先列出一些判定符号等。
                >大于号 <小于号 =赋值(不能用于判定) ==判定号(不能用来赋值) >=(大于等于)
                <=(小于等于) +=(加) -=(减)*(乘) /(除) %(求余数)
                & (and) | (一个竖线,等于or) ! (not)
                除此之外,在if后判定的内容部分,也有一些限制。
                比方说令变量a是一个随机数
                a = rand(10) #0~9的整数,共十个数字
                之后,假设要对a的数值进行判定,小于4的是小,小于7的是中,大于7的是大。可以这样写:
                if a < 4
                print "小"
                elsif a < 7 #elsif就是 elsi if(其他的 如果)的合成词,意思就是除此之外,当判定的分歧在3个及以上时,通常 在它后面接判定部分。
                print "中"
                elsif
                print "大"
                end
                但是,if的后面不能使用逗号、集合
                错误的写法(只写第一行):
                if a == {0,1,2,3}
                if a == 0,1,2,3
                但是,用或来连接是可以的:
                if a == 0|1|2|3
                也可以拆开(如果不嫌麻烦的话)
                if a ==0 || if a ==1 依次类推
                同样,对于case,则不能使用大于小于等符号,只能使用判定。正确的写法有:
                a = rand(10)
                case a
                when 0,1,2,3
                print "小"
                when 4,5,6
                print "中"
                when 7,8,9
                print “大”
                end
                能够看得出,case是可以使用逗号的(不能使用集合),这也是他们的区别之处。
                接下来讲一个简单的小例子解释一下两种判定的用法。
                假设我们设定一个角色1号。在持有某些武器的时候伤害加成。
                持有1,2,3号武器的时候伤害增加5%,4,5,6增加10%
                if attacker.is_a?(Game_Actor)
                if attacker.id ==1
                wea = $game_actors[1].weapon_id
                if wea < 4
                self.damage += (self.damage)*1.05
                elsif
                self.damage += (self.damage)*1.15
                end
                end
                end
                这样看上去,似乎if比较简单,case的话还要一个一个的写
                when 1,2,3
                self.damage += (self.damage)*1.05
                但是,我们在进行制作的时候,武器的编号不一定是连续的。如果说有加成效果的武器是1,16,35,那么用if的话反而会麻烦了。尤其是每个武器都有自身效果的时候,if就变得格外的麻烦。
                反之,case就容易得多了
                when 1
                self.damage += (self.damage)*1.05
                when 16
                self.damage += (self.damage)*1.15
                when 35
                attacker.hp += (self.damage)*0.05 #吸血百分之五
                等等,相同效果的武器也可以在when的后面用逗号隔开。
                这样大致上也就能够明白if和case两者的区别了吧?出去理发,先到这儿了。插楼插楼,小周还是看你了。你的字符串得速度啊= =


                IP属地:上海9楼2015-04-04 14:15
                收起回复
                  3.字符串
                  似乎有一段时间没更新啦…………这一次的字符串讲的简略些……
                  字符串顾名思义是由字符组成的串,字符就是"1""a""啊"这种的东西。
                  这些都是字符串:123,abc,123abc,一二三
                  字符串也可以说是文本,内容随便放,甚至可以是“#”。
                  在RGSS中,表示一个字符串abc是这样的:"abc",英文的引号一定不能漏,不然就会被系统理解为abc这个变量(以后会提到)。使用p和print命令可以直接输出字符串,例如p "RMXP真好用"。
                  此外,字符串可以相加(不能减哦),例如p "123"+"abc"就是"123abc"。
                  本节到此结束(太简单了……)。


                  IP属地:上海本楼含有高级字体10楼2015-04-04 18:09
                  收起回复
                    插课4.变量简介
                    楼上提到了变量的问题,并且给出了“以后会讲”的神答复= =我代劳了……
                    变量大体上可以分为两种,一种叫做“局部变量”,另一种叫做“全局变量”
                    局部变量,顾名思义,只能在局部中使用。通常只对当前一个脚本有效,换到另一个脚本就可能失效了。
                    局部变量的写法很简单,遵循以下原则即可:
                    第一个字符必须以小写英文字母或 _(下划线)开头。
                    第二个字符开始可以使用英文字母、数字或 _(下划线)。
                    不能使用保留字作变量的名称。
                    保留词:
                    alias def false nil return unlessand do for not self untilbegin else if or super whenbreak elsif in redo then whilecase end module rescue true yieldclass ensure next retry undef
                    (不要怪我直接从帮助里面粘贴,因为我记不住这么多。)
                    在上一次插课(咳咳= =)中提到的 a ,就可以称为一个局部变量。
                    全局变量,总的来说也可以分为两种。一种是在脚本中定义的,另一种是数据库里面的内容。不过,所有的全局变量都有一个原则,在变量名称前面加上 $
                    比如说:$a
                    这时候,没有地位的a就俨然变成了一个掌握大权的全局变量。虽然可能再也用不到它了- -
                    在RPG Maker XP系统中,脚本中定义的全局变量一般都是$game_XXX,数据库中的一般是$data_XXX(我没记错的话……)
                    全局变量只要定义过,便可以在之后直接使用。
                    似乎差不多就这些了。小周= =你平常语文作文够字数么……


                    IP属地:上海11楼2015-04-04 18:53
                    收起回复
                      写得非常好


                      15楼2015-07-08 18:30
                      回复
                        啊啊啊,等我有了粗体字之后就更新啊啊啊啊啊啊啊啊


                        IP属地:上海16楼2015-07-11 17:18
                        回复
                          给你跪


                          IP属地:广东来自Android客户端17楼2015-07-12 12:42
                          收起回复
                            快更啊,周大神!


                            来自Android客户端18楼2015-07-15 08:53
                            收起回复
                              楼主写得不错,话说楼主喜欢赛尔号吗


                              19楼2015-08-18 19:35
                              收起回复