设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 八云紫

[RMVX发布] 新手教程--从0开始学RGSS2(2013-09-21 修复索引地址)

  [复制链接]

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

 楼主| 发表于 2010-11-2 17:14:22 | 显示全部楼层
本帖最后由 铃仙·优昙华院·因幡 于 2010-11-2 19:35 编辑


运算


      在说运算之前, 先聊聊数值. RGSS2 里的数值分为两种, 整数(或者 整型) 和 浮点数(带小数的数值). 整数 就是不带小数的数值, 比如 1, 10, 65535 等. 浮点数说直接点就是带有 小数点 的数值, 所以  1.0 , 3.141592 等都属于浮点数. 最后要说的是, 整数在计算上要比浮点数来的快捷, so 能用整数的尽量使用整数吧.

      运算 算是脚本的核心吧. 所有的一切都离不开运算, 图片的移动, 变量的增减都是需要计算. 加减乘除四则运算都没啥必要说明了吧. 举个例子:
  1. p 1 + 1             # 加法
  2. p 10 - 3            # 减法
  3. p 7 * 5             # 乘法
  4. p 25 / 4            # 除法
  5. p 7.0 * 5             # 乘法
  6. p 25.0 / 4            # 除法
复制代码
是不是有个疑问? 为什么 25 / 4 的结果是 6 而不是 6.25 ? 这里需要说明下, RGSS2 在运算的时候会保留数值类型, 只要参与运算的两个数值中, 至少有一个是浮点数的话, 那么结果就会是浮点类型. 由于 25/4 是 整数/整数, 呢吗结果就是整数, 但是整数是没有小数位的, so 就是 6 了. 最后要注意的是, RGSS2 可不会四舍五入, 它的做法是都去掉.
      问题 : 如果执意要四舍五入呢? 怎么办?
      最后的最后, 加减乘除符合数学上的运算优先级, 即 先乘除后加减, 如果需要的话, 请使用 "( )",如: 10.0 * (1 \ (10.0 - 5)

      除了加减乘除外, RGSS2 还有其他的基础运算, 比如 模(也就是 求余), 符号是 "%", 例如:
  1. p 25 % 4
  2. p 25.0 % 4
复制代码
还有一个就是 乘方, 符号是 "**" , 两个乘号. 想计算 3 的 3 乘方的话, 就是
  1. p 3 ** 3
复制代码
结果是 ⑨ 哦. 其实是 27 .

     赋值 的使用也是很普遍的, 这个之前说明过了. 也就没说好重复了.

复合运算


     如果把这些运算组合在一起就是复合运算. 常用的有 "+=" "-=" "*=" "/=" "%=" . 例如:
  1. a = 10
  2. a += 1
  3. p a
复制代码
先把 10 赋值进 变量 a 里面进, 然后 a += 1 , 就是 a 自己加上 1 , 这句等价于  a = a + 1 . 其他的 "-=" "*=" "/=" "%=" 类似就偷懒一下吧.

点评

个人习惯吧, 咱感觉复合刚好点, 毕竟是简写  发表于 2010-11-5 18:44
+,-,*,/等被称作运算符,而1234等被称为操作数,+=等以结果对象为操作数的称为自运算【嘛~对自己进行运算不是么……】。  发表于 2010-11-5 14:48

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

 楼主| 发表于 2010-11-2 19:30:54 | 显示全部楼层
写在前面


致新人们:
       脚本的难易度其实是看你们的努力,  兴趣,  耐心等方面来决定的.  当然, 如果之前有学过其他的编程语言的话,  事半功倍也是常有的事情.
       本教程面向零基础新人, 咱会一点点的来慢慢解说 RGSS2 的. 如果您使用的是 RGSS(也就是 XP)的话, 也可以来看看, 它们在基本的语法啦什么的, 基本上都是一样的. 不一样的是默认脚本以及一些方法.
       所以, 有耐心的话, 请慢慢往下看吧.

致脚本大大们:
       咱知道咱在这里是有点班门弄斧了. 请你们嘴下留情. 如果有什么错误或者建议什么的,  请指正.

致大家:
      你们的支持就是咱的动力. 不要介意咱的某些语病或者表达问题, 咱语文不是很在行, 不过尽量使用最通俗的语言来表达意思.

最后:
      这个算是全文字或者有图片的教程了吧. 求视频教程的, 请出门右拐, 谢谢~~~

最后的最后:
      不定期更新~~~~ (其实是自己有一个游戏坑要填埋, 所以, 见谅).
      这个是无聊啦, 没劲啦什么的教程
RGSS2 与 Ruby

      
     说到 RGSS2, 应该要先说说 Ruby.
     Ruby 的具体信息, 请查看 百度百科 (偷懒~). 一句话概括的话, 就是: Ruby 是一个面向对象的脚本语言. 就这么简单.
     知道 Ruby 后,就可以来说说 RGSS2 了. RGSS2 其实是在 Ruby 语言的基础上衍生来的一个脚本库. 所以, 语法上有共通的地方.

第一个脚本


       好吧,  以上基本上都是一些废话. 正文从这里开始.
       想要学写脚本, 当然是从基础的语句开始啦. 那么就国际惯例, 从 Hello World 开始吧.
  1. p "Hello World"
复制代码
恩, 就这么简单.
       具体的解释一下吧, 首先来看第一个单词 "p" . p 方法(也有叫做 函数) 的用法就是输出后面的信息. "Hello World" 呢, 就是需要输出的字符串. 在 RGSS2 或者说是 Ruby 里 , 使用 " " (双引号) 包含的内容都是字符串.
       那么, 怎么使用以上脚本呢? 要么, 就需要准备 RPG VX 一只, 新建一个新工程(具体流程就偷懒了~~), 按 F11 打开脚本编辑器. 然后把这边的滚动条向下拉, 就会看到一个 Main 脚本, 就是这个:
142517argixn2n2av9ria7.jpg
       然后再 Main 之前点右键->插入(Ins) 一个新的空白脚本, 将以上的脚本写进去, 就是这样子:
143343hbwmtvm25rwqszmh.jpg
       请注意一下那个 "Hello World" 的颜色了, 如果不是红色的话, 请检查一下有没有写错.
       最后是应用->确定->F12 就可以看到结果了. 如果不出错的话, 应该是这样:
143707zwqeu7rwunurbeau.jpg
      点确定后就来到熟悉的标题界面了.

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

 楼主| 发表于 2010-11-2 20:42:34 | 显示全部楼层
本帖最后由 铃仙·优昙华院·因幡 于 2010-11-9 07:04 编辑

字符串


      好早好早之前就使用了这么一个例子  p "Hello World" 其中的 "Hello World" 指的就是字符串.
      字符串就是由零个或多个字符组成的有限序列. 字符是什么就不需要解释了吧.
      在 RGSS2 里, 使用 "" (双引号) 来表示里面的是一个字符串, 例如 "Hello World" 什么的.

      字符串其实也可以参与计算的, 不过只限于 加 和 乘. 字符串的加法就是两个字符串连接, 例如:
  1. p "Hello World" + " Reisen"
复制代码
输出就是 "Hello World Reisen" .
      乘法在数学上就是连续的加, 所以 乘法可以将字符串复制几次. 例如:
  1. p "Hello" * 5
复制代码
这样就出现了5个 Hello 了.

     "\" 这个符号在 字符串里有一个特殊的作用, 那就是转意. 常用的有 "\n" (换行) "\t"(制表符, 也就是键盘上的那个 Tab键) "\s" (空格) 和 "\0" (空, 什么也不放, 可是一个字符串的结束标志, 和句子的结束标志句号一样) "\\" 就是 "\"
举个例子:
  1. print "Hello World \n" * 2
  2. print 'Hello World \n' * 2
  3. p "Hello World \n" * 2
  4. print "Hello\sWorld"
  5. print "Hello\\World"
  6. print "Hello\tWorld"
  7. print "Hello\0World"
复制代码
注意1: 这里使用了一个新的方法 print . 使用它来输出字符串. 如果使用 p 来输出的话, 那些转意字符就会被原样输出.
       注意2: 看到第二个语句了么? 这里使用了 ' '(单引号) 而不是双引号来声明字符串. 使用 单引号的作用在于它使得里面的转意字符会被当做原样处理, 就是说, 什么也不做.
       注意3: 最后一个字符串不要理所当然的以为输出的是 "Hello World", "\0" 不是空格的说. 另外, 每个字符串都是以 \0 结束的.只是没有显示出来. 所以, 这里只输出了 "Hello" 后面的内容都被忽略了.

       内嵌表达式 也是字符串的一个特性. 有的时候我们需要动态的生成一个字符串, 而不是在写脚本的时候去直接指定它们. 比如 VX 里的数值输入. 因为我们不可预见玩家会输入什么数值. 所以需要使用内嵌表达式. 惯例, 一个例子:
  1. game = "VX"
  2. print "RPG #{game}"      
  3. game = "XP"
  4. print "RPG #{game}"
复制代码
这样就可以取得一个动态的字符串了.
       里面的 #{ } 用来将一个 变量 或者语句的结果 直接嵌入到字符串中. 同样的, 如果声明的字符串使用 ' ' 单引号的话, 内嵌表达式 也是无效的.
另一篇教程 : http://rpg.blue/forum.php?mod=vi ... &fromuid=107872

点评

……抱歉……看到后面的那句话了T T  发表于 2012-8-12 18:06
\0是字符串的结尾标志。不是“空”。不计入总长但是还是要存储在内存中。字符串"Hello World"和"Hello World\0ABCDEFGHIJKLMN"其实是等价的。   发表于 2012-8-12 18:05
最后一个例子有什么具体的作用吗?{}里边的还是脚本定义的。怎样变成玩家输入的数值呢?  发表于 2012-7-7 08:29
看不懂啊!  发表于 2012-7-7 08:11
看完后 我来做个视频  发表于 2011-6-26 23:06

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

 楼主| 发表于 2010-11-3 12:18:45 | 显示全部楼层
一晚上和一大早上的看帖两只有小小的 7 个. 悲剧~~~

点评

a=a*1.0 浮点 a=a.to_i 取整数 a=a.round 四舍五入  发表于 2011-11-4 04:26
那个请问,你会不会VB啊  发表于 2011-10-1 22:44
哦,先转成俘点在转成整数啊。。恩,跟别的不太一样啊,非常感谢~~~  发表于 2010-11-4 12:14
to_i 可视为是将任何型态转成"数字" 如果想把a = "10.2"这个字串转成整数数字 可以如此做 b = Integer(a.to_i) 如此b就会等于10了  发表于 2010-11-3 12:40
饿,辛苦了.想请问大大 rgss 有没有转到整数的方法 to_i 是转到浮点型 "10.2" -> 转整数->10 没有这个方法?  发表于 2010-11-3 12:34

评分

参与人数 1+2 收起 理由
夕阳武士 + 2 摸摸铃仙,辛苦了

查看全部评分


《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

Lv1.梦旅人

战国美少年森兰丸

梦石
0
星屑
204
在线时间
852 小时
注册时间
2008-7-20
帖子
3705
发表于 2010-11-3 13:01:26 | 显示全部楼层
回沉影前辈:
与"管理层"无关,我们只是一个自由成立的教程社团.
回复 支持 反对

使用道具 举报

Lv2.观梦者

神隐的主犯

梦石
0
星屑
258
在线时间
271 小时
注册时间
2008-2-22
帖子
7691

贵宾

 楼主| 发表于 2010-11-3 18:53:24 | 显示全部楼层
本帖最后由 铃仙·优昙华院·因幡 于 2010-11-3 19:39 编辑

函数(方法)

      
      先来说说函数(或者叫方法)吧. 可以这么说吧, 函数就是一些具有特定功能的语句的组合.  通俗的认为, 函数就类似一个加工厂一样, 我们提供给它原料, 那么它在不出错的前提下就会完成某种功能, 然后可能返回一个成品给我们.

      RGSS2 中, 这样定义一个函数:
  1. def 函数名[(参数列表)]
  2.    函数体
  3.    [return ...]
  4. end
复制代码
def 属于关键字, 表示定义函数的开始. 函数名遵守于变量名一样的规则. 后面的 参数列表 表示这个函数工厂需要什么原料. 特别的, 当函数不需要这个参数列表的时候, 可以连着 "( )" 一起不写. 函数体里写这个函数的实现过程, 例如工厂是怎么依次处理原料的. return 是 这个函数的返回关键字, 表示这个函数返回一个什么成果给我们, 也就是 返回值 了. end 与 def 对应, 不能少.

     举个例子吧,
  1. def add(x, y)
  2.    return x + y
  3. end
复制代码
这个叫做 add 的函数需要两个原料, 分别是 x, y . 函数的功能是将两个原料相加, 返回相加后的结果. 值得注意的是 参数列表使用 "," 逗号来分隔每个需要的参数.

     定义完函数后, 就可以使用它们了. 使用方法非常简单, 直接 函数名(需要的参数) 即可. 如果函数有返回值的话, RGSS2 执行好这个函数后, 就会返回那个返回值. 依旧是上一个例子:
  1. a = add(1, 2)
  2. p a
复制代码
不过要注意的是, 函数后的参数列表的个数一定要和定义的时候的个数一样. 否则就会出现错误.

     什么情况下可以使用函数? 这个估计会多人都会问到. 一口气把函数里的内容全部都柔和在一起不是更好?
     函数的使用可以减少一些不必要的麻烦. 比如 某个功能 需要在多个地方执行多次, 但是实现的脚本都是一样的话, 使用函数是最好的办法. 这样如果需要修改的话, 不需要一个地方一个地方的去找, 然后修改. 这样写脚本的效率就会提高很多. 虽然使用函数会照成额外的脚本开销.

     那么, 我们继续吧. 来说说参数. 其实参数可以在定义的时候直接指定一个默认值, 这样的调用上就可以忽略这个参数了. 例如
  1. def add(x, y = 1)
  2.    return x + y
  3. end
  4. p add(1, 1)
  5. p add(1)
  6. p add(1, 2)
复制代码
可以看到两个函数的返回值都是一样的. 所以, 在使用函数的时候, 如果忽略某一个默认参数, 那么脚本就会带入设定好的值, 比如这个例子的 y.
      不过主要注意的话, 默认参数只能定义在最后. 也就是说, 默认参数的后面只能是默认参数. add(x , y = 1, z) 这么定义是错误的.

    函数是可以重定义. 这个是外带脚本的编写原理. 两个同名(相同的函数名)的函数在相同的定义环境下, 后定义的函数会取代前一个函数, 多个的情况也是类似.
  1. def add(x, y)
  2.    return x + y
  3. end
  4. p add(1, 1)

  5. def add(x, y)
  6.   return x - y
  7. end
  8. p add(1, 1)
复制代码
可以看到第一个定义的 add 被覆盖掉了.

      在写外带脚本的时候, 需要保留前一个, 也就是默认的脚本的功能的话, 可以使用 alias .用法如下 :
  1. alias 新函数名 旧函数名
复制代码
这里含义是, 给旧函数名取一个别名, 小名什么的. 在后面就可以使用这个别名来表示这个函数. 例如:
  1. def show
  2.    p 1
  3. end
  4. show
  5. #
  6. alias old_show show
  7. def show
  8.    old_show
  9.    p 2
  10. end
  11. show
复制代码
第6句就是给第一个函数show取别名, 这样在后面重定义这个函数的时候, 就不会直接影响到原来的函数了.
写外带的脚本的时候, 使用 alias 是一个好习惯.

点评

第8句删了一样用,后面old_show单独出来还是1  发表于 2013-6-11 19:50
old_show是调用该函数  发表于 2012-7-20 13:39
对啊,第八句的old_show是干啥的?  发表于 2012-7-7 08:36
请问第八句的 old_show 有什么作用?  发表于 2011-7-25 13:31
如果为读者介绍 # 的作用就好了 # 相当于一个注释 例如 p “dsadd” # 打印语句 中 #用于解释前面的内容  发表于 2011-6-26 23:48

《天空之城 —— 破碎的命运》
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
775
在线时间
15 小时
注册时间
2010-10-17
帖子
35
发表于 2010-11-4 20:07:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
775
在线时间
15 小时
注册时间
2010-10-17
帖子
35
发表于 2010-11-4 20:33:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
775
在线时间
15 小时
注册时间
2010-10-17
帖子
35
发表于 2010-11-4 23:47:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
775
在线时间
15 小时
注册时间
2010-10-17
帖子
35
发表于 2010-11-5 19:46:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-3-29 09:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表