自动登录 密码
登录 让不懂编程的人也能做出精美的游戏来。
高效编辑、画面流畅、RGSS2脚本系统
动作游戏制作大师
查看:
回复:
[RMXP发布] 当前离线
最后登录
2011-7-31
好人卡
在线时间
379 小时
注册时间
2006-10-16
孤独守望
173 好人卡
19 精华
1 经验
在线时间
379 小时
注册时间
2006-10-16
发表于 2009-7-16 13:29:54
本帖最后由 IamI 于 2009-7-16 17:44 编辑
Part 1 错误类型解析速查
昨天看见群上有人要就写了一份,每一种错误后面都配置了触发代码
如有不尽如人意或错误之处,欢迎指出。
(我怎么觉得没什么大用- -)
【Syntax Error】
■ F1 若出现语法错误时就会引发该异常。 出现频度 ★★★★★(频发)
出现时机
a 真正的语法错误。
a = [0)
复制代码
b 配套缺失。这也是诸多Syntax的主要原因。常见的有:少了若干个end,少了若干个]、)、}等等
注意:这种错误的报错位置在实际错误位置之后若干行。当你看到一个空行、一个end行,甚至是注释行报错时,一般就是这种类型
I.end过少
cla A def initialize(v) if v != 0 @v = v end end
复制代码
II end过多
cla B def initialize(v) p v if v == 0 end end
复制代码
注:需要配置end的语句有:cla module def if case begin
III 双引号的缺失
a = @t = 6;@p = 10;@q = 20
eval(a)
注:需要配置的符号有:[] {} () '' //
【Argument Error】
■ F1 若参数个数不对或者参数值错误时,就会引发该异常。
出现频度 ★★★★(常见)
出现时机
a 真正的参数数量错误
$scene = Scene_Map.new(1,2)
复制代码
b 真正的参数类型错误
$scene = Scene_Map.new(true)
复制代码
c 继承引起的参数错误,通常出现在继承类当中,频发于super语句中
I 忘记了指定基类
cla Window_A def initialize super(0,0,120,120) self.contents = Bitmap.new(@width - 32,@height - 32) end def update self.contents.draw_text(0,0,88,88,It's a test~~~) end
a = Window_A.new
复制代码
II 不符合基类的方法重载(这个错误有的时候非常能迷惑人)
cla Sprite_A Sprite def initialize(str) super @str = str end
a = Sprite_A.new
复制代码
唯一注意的是:super后面如果不加括号,那么系统将直接将本方法的参数传递给基类的同名方法。
【Index Error】
■ F1 若索引超出范围就会引发该异常。
出现频度 ★(非常罕见)
出现时机
仅有使用Table时才会出现的故障。
【EOF Error】
■ F1 若到达 EOF(End Of File)时就会引发该异常。
出现频度 ★☆(罕见)
出现时机
常常出现有关于存档画面的脚本中,但是非常少见。(存档脚本冲突有时会出现。)
a = File.open(Data/Actors.rxdata)
b = Marshal.load(a)
c = Marshal.load(a)
复制代码
【LocalJump Error】
■ F1 控制结构的跳转点没有发现时会引发该异常。
出现频度 ★(非常罕见)
出现时机
不会在有Goto语句以外的脚本中出现。目前网上流传的脚本中,没有Goto语句。
【Name Error】
■ F1 若使用未定义的变量或常量时就会触发该异常。
出现频度 ★★★☆(比较常见)
出现时机
常常出现于new定义的语句中,修正这类问题时注意:
a Ruby对大小写敏感,因此不能随意修改大小写
$scene = Scene_menu.new
复制代码
b 常量必须全部大写。
JUST_NUM = 100
p Just_num
复制代码
【NoMethod Error】
■ F1 若调用了未定义的方法时,就会引发该异常。
出现频度 ★★★★★(频发)
出现时机
a 真正的未定义方法错误
在事件脚本中执行:
hello()
复制代码
小贴士:要在事件脚本中执行的方法在Interpreter类中,无论哪里都能执行的方法在Kernel模块中。
b 模块的困惑
module A def call p call end
复制代码
II 模块、数值类没有new方法
a = Fixnum.new
复制代码
c 继承引起的错误
d nil的NoMethod错误(包括nil的加减乘除)
a = nil + 6
b = nil * 8
复制代码
不要说这种错误不会有人这么傻,下面的这个脚本错误就很可以迷惑人
a = [3,4,5]
b = a[3] + 6
复制代码
e 有效区域引起的错误
【Range Error】
■ F1 与范围有关的异常。在进行超出范围的数值变换(从 Bignum 变为 Fixnum)等操作时就会引发该异常。
出现频度 ★(非常罕见)
出现时机
除非进行强类型转换,否则不会出现。
【Float Domain Error】
■ F1 若想将正负无穷或 NaN(Not a Number)变为 Bignum,或与 NaN 进行比较时就会引发该异常。
出现频度 ★(非常罕见)
出现时机
除非人工制造NaN,否则不会出现
【Regexp Error】
■ F1 若未能成功编译正则表达式,则引发该异常。
出现频度 ★★(罕见)
出现时机
不会出现于脚本冲突中,在脚本编写中频发但通常显示为Syntax Error.具体请参看正则表达式教程。
【Runtime Error】
■ F1 运行时异常。当调用了 raise 却未指定异常时,就会引发该异常。
出现频度 ☆(极度罕见)
出现时机
除非编写脚本时错误,否则不会出现。
在最开始执行
复制代码
【SystemStack Error】
■ F1 若栈深度过深的话就会引发该异常。
出现频度 ★★★(一般)
出现时机
已经定义的方法名被再度被alias为相同名的方法。
经常显示为Stack level too deep.alias语句中经常出现的问题,也是一些脚本冲突的主要原因。
ex 加入以下脚本,点击“新游戏”触发。
cla Scene_Map alias old_init initialize def initialize(*paras) old_init(*paras) end
cla Scene_Map alias old_init initialize def initialize(*paras) old_init(paras,1) end
复制代码
注意:最常见的触发方式是,一些已经alias过的语句,按F12以后,游戏崩溃。具体触发条件不明。如有见解,欢迎指出。
【Type Error】
■ F1 若使用了错误的类型时,就会引发该异常。
出现频度 ★★☆(比较少见)
出现时机
在脚本冲突当中非常少见,但是在脚本编写中经常见到。常见的有Fixnum to String,String to Fixnum,nil to Fixnum,nil to String
I Fixnum to String
num = 6
b = Hello + num
复制代码
II String to Fixnum
num = 6
b = num + Hello
复制代码
不要因为仅仅是顺序交换而弹出不同的出错信息而困惑——因为它无关紧要。
注意:解决该种问题可以使用to_s方法,但是很多时候可能要用i ect方法。下面的代码也许可以帮助你理解。
array = [3,4,5]
p array,array.to_s,array.i ect
复制代码
【ZeroDivision Error】
■ F1 若将某值除以 0 时,就会引发该异常。
出现频度 ★★★(一般)
出现时机
经常出现在一些大型的脚本当中。当然不会有直接/0的语句,但是诸如/@index,/@count的语句中频发。
a = 1/0
复制代码
注意:1/0.0 输出无穷大,0.0/0.0输出NaN,这样可能弹出错误的是在其语句之后。3535的复数脚本也会弹出类似的错误——当然你不会用他。
在佣兵脚本中经常存在一个ZeroDivision Error。
【SystemExit】
■ F1 结束程序的运行。请参考 exit。
出现频度 ☆/★★★★★
每当退出游戏,就会抛出一个System Exit。在实际脚本应用中极度罕见。
Part 2 对z值的探究
这是为一些全动画脚本的z值问题想的焦头烂额的人准备的
请看下面的代码:
cla Scene_Da
def main @viewport1 = Viewport.new(0,0,640,480) @viewport2 = Viewport.new(0,0,640,480) @viewport1.z = 300 @viewport2.z = 1000 @ rite1 = Sprite.new(@viewport1) @ rite2 = Sprite.new(@viewport2) @ rite1.z = 99999 @ rite2.z = -99999 @ rite1.bitmap = Bitmap.new(100,100) @ rite2.bitmap = Bitmap.new(100,100) @ rite1.bitmap.fill_rect(0,0,100,100,Color.new(255,0,0)) @ rite2.bitmap.fill_rect(0,0,100,100,Color.new(0,255,0)) @ rite2.x = 50 Graphics.tra ition loop do Graphics.update I ut.update update if $scene != self reak end end Graphics.freeze @ rite1.di ose @ rite2.di ose
def update @ rite2.update @ rite1.update
复制代码
呼出Scene_Da,结果是z值小的Sprite2在上。所以我认为,z值判定顺序应该如下:
1 判定Viewport的z值大小(未指定Viewport,直接生成Sprite的z值为0),Viewport z值大的,该Viewport里面的Sprite永远在上(不管Sprite的z值)
2 两个Viewport z值相同,取决于Sprite的z值
3 判定两个Sprite z值大小,z值大的在上
4 两个Sprite的z值相同,先生成的在上
5 先后顺序与刷新顺序无关
Part 3 事件指令代码、参数列表
太长了,上传= =
游客,本帖隐藏的内容需要积分高于 30 才可浏览,您当前积分为 0
附件:
你需要
才可以下载或查看附件。没有帐号?
唱吧唱吧忧伤的歌。
只是不敢回头望,怕跌下去,闪了腰,伤了心,绝了迹。
嘛嘛,毕竟我是因为回忆而不是梦想存在的存在啊。 当前离线
最后登录
2011-7-31
好人卡
在线时间
735 小时
注册时间
2008-1-1
八云紫的式神
43 好人卡
22 精华
3 经验
在线时间
735 小时
注册时间
2008-1-1
发表于 2009-7-16 13:58:19
阅读权限30……这是怎么回事
居然被求粉了= =微博常年不用鸭梨大啊
当前离线
最后登录
2011-7-31
好人卡
在线时间
379 小时
注册时间
2006-10-16
孤独守望
173 好人卡
19 精华
1 经验
在线时间
379 小时
注册时间
2006-10-16
发表于 2009-7-16 14:01:53
OTZ写错了= =去掉就是
附件不能限制积分吗?对于新手来说指令列表没用
zh我上次不是给你过了= =
唱吧唱吧忧伤的歌。
只是不敢回头望,怕跌下去,闪了腰,伤了心,绝了迹。
嘛嘛,毕竟我是因为回忆而不是梦想存在的存在啊。 当前离线
最后登录
2011-7-22
好人卡
在线时间
25 小时
注册时间
2007-8-26
神之意志, 积分 272, 距离下一级还需 28 积分
157 好人卡
6 经验
在线时间
25 小时
注册时间
2007-8-26
发表于 2009-7-16 14:04:51
Part 3 事件指令代码、参数列表
小弟不才,不懂~
还请IamI前辈解释~
当前离线
最后登录
2011-8-1
好人卡
在线时间
418 小时
注册时间
2008-10-29
War Criminal Number One
405 好人卡
47 经验
在线时间
418 小时
注册时间
2008-10-29
发表于 2009-7-16 17:39:54
本帖最后由 后知后觉 于 2009-7-16 17:43 编辑
把附件插入到文章里去
会得到这样的代码
[ attach]1883[ / attach]
对这个代码进行隐藏 就是那个 hide 按钮
[ hide = 限制的积分 ][ attach ]1883[ / attach ][ / hide]
就能对附件加限制了
你知道得太多了
当前离线
最后登录
2009-12-27
好人卡
在线时间
0 小时
注册时间
2009-8-15
杂兵, 积分 1, 距离下一级还需 2 积分
在线时间
0 小时
注册时间
2009-8-15
发表于 2009-11-26 19:24:02
文章不错,不过附件需要30分,下载不了
当前离线
最后登录
2011-7-24
好人卡
在线时间
2 小时
注册时间
2009-6-6
杂兵, 积分 2, 距离下一级还需 1 积分
1 经验
在线时间
2 小时
注册时间
2009-6-6
发表于 2009-11-26 21:49:01
很荣幸,三星以上的全见过了。
梦想逍遥游官方论坛:
当前离线
最后登录
2011-7-22
好人卡
在线时间
11 小时
注册时间
2006-9-17
士兵, 积分 5, 距离下一级还需 2 积分
在线时间
11 小时
注册时间
2006-9-17
发表于 2009-11-27 07:45:39
看样子很实用的教学呀。
欢迎光临吞食群雄传专区
《游戏制作军工厂》QQ群:41792464
当前离线
最后登录
2011-8-1
好人卡
在线时间
98 小时
注册时间
2006-6-13
彩色的银子
130 好人卡
3 精华
1 经验
在线时间
98 小时
注册时间
2006-6-13
发表于 2009-12-3 00:44:10
SystemStack Error 呢其实是这样的..
def a(level) @level = level (@level += 1)
def b(level) @level = level a(@level+=1)
@level = 0
begin a(@level)
rescue SystemStackError SystemStackError , 栈深度#{@level}
您需要登录后才可以回帖
发表回复
回帖后跳转到最后一页
GMT+8, 2011-8-1 04:25
Powered by
2001-2011
积分 0, 距离下一级还需
回顶部自动登录 密码
登录 让不懂编程的人也能做出精美的游戏来。
高效编辑、画面流畅、RGSS2脚本系统
动作游戏制作大师
查看:
回复:
[讨论]
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
3 天前
本帖最后由 「旅」 于 2011-7-31 20:50 编辑
写作初衷:
也许只是我个人理解有问题,但确实有种感觉,最开始接触的无论是脚本入门还是站上的各种教程时,总是不习惯一大堆的理论内容,而又经常找不到半句相关的代码,于是最终总因不知所云而放弃。除此之外,自己比较想知道的例如
生成图片
保持读取
的问题也根本看不到踪迹,弄得自己更加头大。所以正是因此,自己一直希望写出一个能适合和我有同样遭遇的同学的教程。趁着暑假的到来,希望完成这个想法,请大家支持我
注意事项:
1.这个教程是更多的是面向那些为了制作出更精美游戏的制作者而写的,如果你单纯是为了学习编程的话,我个人不推荐这个教程。
2.脚本是比较抽象的事物,学习起来会比较辛苦,所以一定要先确保自己真的有一份制作游戏的热情,能不能学好都看你的觉悟。
3.这个教程最开始的部分会复制脚本入门的内容(偷懒),但很多地方都有修改,会尽力更加适合新人观看的。
4.基础篇09-12是完全新写的教程,而且里面的内容很重要,新人可以观看。(暂时在Word里,等下放到论坛)
麻烦大家啦:
可能有些错别字或讲解错的内容之类,希望察觉的同学可以帮忙回帖提示下。有什么好建议或疑惑也可以回帖
感谢大家的支持
好人卡
小旅什么的最萌了~
抱抱师姐
旅姐加油啊
旅姐姐大触
旅酱辛苦了
总评分: 经验 + 935 好人卡 + 2 VIP + 4 终于考完试了.撒花~
当前离线
最后登录
2011-7-30
好人卡
在线时间
54 小时
注册时间
2010-10-10
剑士, 积分 11, 距离下一级还需 1 积分
1 好人卡
27 经验
在线时间
54 小时
注册时间
2010-10-10
发表于
前天 09:51
本帖最后由 「旅」 于 2011-7-30 23:33 编辑
01. 写在前面(主楼)
(基础篇)
02. 03. 04. 05. 06. 07. 08. 09. 10. 类和实例
11. 认识内部类
12. 类的属性
13. 显示图片
14. 数组
15. 哈希表
(解读篇1)
16. 数据库
17. 场景类
18. 游戏对象
19. 精灵
20. 窗口
21. 讲解Bitmap
22. Main
(解读篇2)
23. Selectable
24. 对话框
25. 保存与读取
26. 编译器
(解读篇3)
27. Rect Viewport
28. Table
29. Color Font Tone
30. RPG::Weather Tilemap
31. 冷门类的讲解
32. 错误Error
(扩展篇)
33. Plane
34. 常量
35. 模块
36. alias的用法
37. 38. 39. 40. Proc
41. 脚本运行的效率
42. lit的用法
43. egin
44. 几何图形的描绘
因为另一个我,所以,要抛弃过去了。
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 09:55
本帖最后由 「旅」 于 2011-7-30 10:03 编辑
02.脚本的介绍
什么是脚本:
脚本语言是一种独特的简单语言,RPGXP 采用的是 Ruby 脚本语言。Ruby 的官方网页是
Ruby 是松本行弘先生开发的免费软件,描述大规模的游戏也能保持良好性能。是善长文本处理的语言,照原样会加大游戏开发的难度。因此,对游戏开发用途的 Ruby 语言进行了特殊化,这就是 RGSS(Ruby Game Scripting System),中文意思就是 Ruby 游戏脚本系统。
总而言之,RGSS是Ruby的特殊化(稍微加了些东西),而脚本是以RGSS为基础来编写的事物就是了。你要把脚本说成RGSS或Ruby都可以。 .默认下脚本文件是 游戏目录/Data/Scripts.rxdata 在里面存放的就是代码的数据了。
脚本有什么用:
只要你有技术,它可以帮助你做出一切你想要的游戏。技术稍浅的同学,整合、修改站上的各种脚本都够你用的了。如果技术足够,又富含想象力,那么一个惊天地泣鬼神的银河系统(大雾)也将自然不在话下,只要你努力~!
学脚本需要什么条件:
1.热情
2.信心
3.耐心
无论你现在只是上小学或是初中,无论你英语数学考得多么糟糕,不要觉得脚本就和自己没有任何关系了。
1.论坛上很多学会脚本的人都和你一样也在读小学和初中,而他们也并非所谓的天才只是普普通通的人,但不同的是他们坚信自己能够学好脚本,所以他们做到了!
2.学习脚本或是教程,”真正需要你记住”的英语单词少之又少,具体为什么以后再讲,总之不要给自己找借口!
3.第三,制作游戏需要的数学基础很少,所以也不要担心这点。
总而言之,只要有信心,每个人都可以学好脚本。
学习脚本的好习惯:
量力而为
。做人要醒目,不要横冲直撞。每次看脚本不要过久,大概50分钟后可以休息一下,这样既可以事半功倍,还可以防止因为厌烦情绪导致的学习信心下降。
即时复习
。虽然每次看完脚本都会有种云里雾里的感觉,这很正常。先休息一天,到了第二天复习时便会时不时有感觉到”昨天看起来很复杂的东西,今天却领悟到了什么”这样奇妙的滋味。
不要懒惰
。每一段在教程里出现的代码都应该自己亲自改改、试试,这样才能学的牢固。
不耻下问
。有问题别自己纠结,可以到论坛寻求帮助,在论坛里学习的贴子总都会得到热心回答的哦。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:08
本帖最后由 「旅」 于 2011-7-30 11:03 编辑
03.开始
新建脚本:
首先打开脚本编辑器,可以用快捷键F11直接打开。打开之后,在左边那里右键选择插入,
下面的名称可以随便取,他不会有任何的影响
。恩这样就建立了我们第一个脚本页。
结束程序:
接下来我们来执行一下下面这段代码,
注意,在 Ruby 中是区分字母大小写的,所以不能输入 EXIT 或 Exit。当然全角文字也不行。请全部以半角的小写字母输入。输入完毕按”确定”键关闭脚本编辑器,运行(游戏测试F12)看看吧。
运行游戏测试,窗口应该显示一瞬间后立即关闭。因为
exit是结束程序的代码
,所以一进去就被退出来了。
显示数据:
在写脚本时经常会用到的一个代码就是p了,它的作用很大。
很多数据都可以用p显示出来
。例如:
p “66RPG”
注释:
有时脚本写起来会比较多行,内容会比较复杂,所以
为了避免忘记某段脚本是什么意思,所以可以利用#来说明
。例如:
p 123 # 我只是打酱油的
exit # 我只是路过的
你可以试试把#和后面的文字去掉,它的效果和有加上#时是一样的。所以说,
在#后面的内容是不会影响到脚本的运行
点评 口胡那是字符串那节课的~~~ 发表于
前天 10:14 #{}呢 发表于
前天 10:13
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:17
本帖最后由 「旅」 于 2011-7-30 11:05 编辑
04.数字的计算
Ruby 中能使用的数字,包括整数和浮点数两种。
p 3 # 整数
p 52 # 整数
p -99 # 整数
p 1.5 # 浮点数
p 3.0 # 浮点数
所谓浮点数,就是有小数点的数
。数值相同的话写作 3 是整数,而写作 3.0 即是浮点数。整数计算速度快,如果不需要小数点以下的话尽量使用整数。
计算方法
在 脚本编辑器 输入这些计算内容吧。
p 1 + 1 # 加法
p 10 - 3 # 减法
p 7 * 5 # 乘法
p 24 / 4 # 除法
这样,写上普通算式就会输出计算的结果。
优先顺序
和普通的数学算式一样,* 和 / 计算要优先于 + 和 - 计算。想改变这个顺序就要
使用括号 ( ),括号中的算式将会优先计算
。 .注意不要用()而应该用()才对。
p 2 * 2 + 3 * 4 # 16
p 2 * (2 + 3) * 4 # 40
p 2 * (2 + 3 * 4) # 28
按优先顺序,示例第一行其实是 4+12,第二行是 2*5*4,第三行是 2*14,所以会是不同的计算结果。
括号还可以多层重叠起来,例如:
p (2 * (3 + 4)) – 5
小数点以下的计算
整数除整数的情况下,会省略余数,***将还是整数
。想得到小数点以下的***,就要使用到浮点数。
除数或被除数至少要有一个是浮点数(明确标明了小数点以下),计算的***就会是浮点数
p 15 / 4 # = 3
p 15.0 / 4 # = 3.75
p 15 / 4.0 # = 3.75
余数的计算
求余数(除法的余数),是使用 % 符号
p 14 % 4 # = 2
p 13 % 4 # = 1
p 12 % 4 # = 0
不知道什么是余数的同学可以去百度查一下,因为余数这样东西在以后写脚本时大有用途。
乘方的计算
乘方(同一个数指定次数的相乘)是使用 ** 符号
p 2 ** 4 # = 16
这个示例求 2 的 4 次方,计算 2*2*2*2,也就是2连续乘以4次的意思。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:33
本帖最后由 「旅」 于 2011-7-30 11:07 编辑
05.变量
脚本里变量是一个很重要的东西,几乎每段代码都会涉及到变量。让我们一起来学习变量的基础知识。
变量的命名
我们可以为变量取比如 x 和 y 或者更长的像 level 或 gold 这样的名称。名称的长度没有限制。
变量有几个类型,首先我们来学习最基本的
局部变量
。局部变量的命名规则有以下几点。其中的第 1 条应该特别注意。
1.第一个字符必须以小写英文字母或 _(下划线)开头。
2.第二个字符开始可以使用英文字母、数字或 _(下划线) 。
3.不能使用保留字作变量的名称。
保留字是作为 Ruby 中具有特殊意义的词而被系统所「保留」,所以变量名称不能使用。以下就是系统的保留字。
alia def false nil retur unle and do for ot elf until
begi else if or super when
break elsif i redo the while
case end module rescue true yield
cla e ure ext retry undef
除上面列出的保留字以外,其它的词都可以作变量的名称。
赋值和引用
在实际中使用变量看看吧。
p x + y # 7
第一行和第二行是进行变量的赋值。其中 = 号是赋值运算符。
和数学上使用等号表示「左边等于右边」的意思不同,这里表示「左边的变量代入右边的数值」
。在上述示例中,第一行 x 变量和第二行 y 变量分别代入数值 3 和 4。
第三行是引用变量 x 和 y。所谓引用就是取得那个变量的数值。变量的计算和数字的计算方法完全一样。这里的 x + y 可以解释为 3 + 4,计算结果就为 7。
另外,
引用从未进行赋值的局部变量,就会使程序出现错误
p zzz # 系统会提示错误
请记住,变量一定要进行赋值后才能使用。
zzz = 5
p zzz # 5
这个示例中,第一行变量 zzz 为其赋值代入 5 后,第二行引用。
自运算
变量引用自己的数值,并再次代入计算结果称为自运算
p x # 10
第二行的 x += 7 相当于 x = x + 7,总之就是向变量 x 里加上 7。同样 -=、*=、/=、%= 等也是如此使用。这些运算符就是自运算运算符。
这个示例中第一行是赋值直接代入 1,第二行加上 7,这时 x 的值其实是 8,第三行减去 3,第四行再乘以 2,最后的计算结果就是 10。
全局变量
局部变量是暂时使用的变量,只能在方法和类等定义(在后面讲述)内部使用,之外变量就无效。与之相对,
在程序任何地方都能引用的就是全局变量
。全局变量可以在程序中任何地方使用,名称相同,就必然是同一个变量。
如下面的示例,以 $ 号开头的变量就作为全局变量使用。赋值方法和局部变量完全相同。
$global
虽然在任何地方都能引用,但使用全局变量不一定比局部变量好。
全局变量十分强大,胡乱使用恐怕会使程序变得很难懂,而且因为它会一直存在,导致内存的浪费。请在使用时注意
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:34
本帖最后由 「旅」 于 2011-7-30 11:10 编辑
06.条件分歧
满足特定的条件与否,之后的动作会根据其不同而改变就叫作条件分歧。
比较运算符
在具体地学习处理条件分歧的方法之前,要先记住条件构成中使用的运算符。
下面 6 个运算符称为
比较运算符
。使用这些运算符,和给予条件(数字和字符串)相比较,然后返回结果。
== 相等
!= 不相等
小于
大于
= 小于或相等
= 大于或相等
这里一定要注意的是,
判断相等的运算符不是 = 而是 ==
。像已学习过的那样,所谓 = 符号表示的不是比较而是代入。请注意不要弄混淆了。
真伪值
比较运算的运算结果就称为真伪值
。有真(正确)、伪(错误)两种情况。
比较后是
正确的话为 true 值,是错误的话就为 false 值
。请试试看吧。
p (早安 == 早安) # true
p (早安 == 晚安) # false
p (3 + 1 == 3 + 5) # false
p (3 + 1 == 2 + 2) # true
复制代码
逻辑运算符
下面 6 个运算符称为
逻辑运算符
&am am 「~,与,~」的意思
|| 「~,或,~」的意思
! 「非~」的意思
英文单词运算符和符号运算符,无论用哪个都是一样的。在预置脚本中运用的主要是英文单词。使用这些逻辑运算符就能指定更加复杂的条件。
p (100 77 and 1 + 1 == 2) # true
p (100 77 &am am 1 + 1 == 2) # true
复制代码
上述示例中,第一行和第二行表示的都是一个内容「100 大于 77 同时 1 + 1 等于 2」。不用说 100 是比 77 大的整数,1 + 1 ***也为 2,两个运算都成立。所以输出结果就为 true(真,正确)。
那么,看下一个算式吧。
p (1 + 1 == 3 or 2 + 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 (not true) # false
p (! true) # false
复制代码
上述示例中的内容是「非 true」的意思,所以输出结果为 false。
if ~ elsif ~ else ~ end
if ~ end 语句是条件分歧的句法
。这个和英文的 if(如果~就)意思相同,表示「如果 if 后面的条件成立的话,就运行下面的处理」的意思。下面示例中的 3~5行就是条件分歧。
a = 20 # 为变量 a 赋值代入 20。
if a = 10 # 如果 a 为 10 以上的话, rint " ig" # 显示 big。
end # 分歧结束。
复制代码
在条件不满足时也要进行处理的情况下就使用 else,条件不满足但指定另一个条件的情况下就使用 elsif。
a = 7 # 为变量 a 赋值代入 7。
if a = 10 # 如果 a 为 10 以上的话, rint " ig" # 显示 big。
elsif a = 5 # 除此之外,如果 a 为 5 以上的话, rint medium" # 显示 medium。
else # 其他, rint " mall" # 显示 small。
end # 分歧结束。
复制代码
unle ~ end
与 if 相反,
在条件不满足时才进行某些处理的情况下使用 unle 语句
a = 7 # 为变量 a 赋值代入 7。
unle a = 10 # 如果 a 不为 10 以上的话, rint " mall" # 显示 small。
end # 分歧结束。
复制代码
case ~ end
在条件为特定的变量值进行分歧的情况下使用 case 语句
会更方便。
a = 0 # 为变量 a 赋值代入 0。
case a # 分歧开始。
when 0 # 当 a 为 0 时, rint 零" # 显示 零。
when 1 # 当 a 为 1 时, rint 壹" # 显示 壹。
when 2 # 当 a 为 2 时, rint 贰" # 显示 贰。
end # 分歧结束。
复制代码
把第一行 a = 后面的 0 改为 1 和 2,然后再来看看分歧的结果吧。当 a 代入 1 时会显示“壹”,代入 2 时会显示“贰”。
条件运算符
使用符号 ? 和 : 也是运算符形式的条件分歧语句
p (a = 10 ? " ig : " mall) # = " mall
复制代码
这个示例的意思是,变量 a 的值在 10 以上的话就显示 " ig, 9 以下的话就显示 " mall。条件运算符的语法是「条件 ? 真时的值 : 伪时的值」。上述的条件是 a = 10,真时的值为 " ig,伪时的值为 " mall,会根据条件是否满足来决定使用 ? 或 : 的值。
当然使用 if 语句也能完成同样的事情。
if a = 10 " ig
else " mall
复制代码
使用 if 语句的语法会像上面写的那样,但是使用条件运算符语句会更加简洁。该语句在当前的脚本中也使用得很多,所以最好事先记住。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:34
本帖最后由 「旅」 于 2011-7-30 11:11 编辑
07.字符串
一般来说,
由文字连接起来的数据就称为字符串
双引号 或单引号 '' 中间的部分,就作为字符串数据使用。
p RPG Maker XP" # RPG Maker XP
p 'RPG Maker XP' # RPG Maker XP
复制代码
p 命令会导致双引号和字符串一起输出,所以可以使用 print 命令代替。
print RPG Maker XP" # RPG Maker XP
复制代码
这次双引号就没有了。
print 和 p 相似,但它只显示字符串本身。
为变量赋值
和数字一样,
字符串也能代入变量为该变量赋值
a = RPG Maker XP
print a # RPG Maker XP
复制代码
字符串
也能作加法
,字符串加上字符串,就会得到一个连接起来的字符串为***。
a = 我的
b = RPG Maker XP
print a + # 我的 RPG Maker XP
复制代码
还可以作乘法
,字符串乘以一个整数,就会得到该整数次重复的字符串为***。
a = RPG Maker XP
print a * 2 # RPG Maker XPRPG Maker XP
复制代码
控制码
这个东西在原来的脚本入门里有讲,但其实学了也没有太大的意义,所以这里就不讲了,没看过的同学可以去脚本入门稍微过目一下,不过不用太在意就是了。
内嵌表达式
在字符串里面,
可以用 #{变量名} 的形式把变量的内容嵌入在字符串当中
game = RPG
print #{game} Maker XP" # RPG Maker XP
复制代码
上述示例里,第一行是为 game 变量赋值代入字符串“RPG”。第二行里面,其中 #{game} 是表示直接嵌入变量 game 的值字符串“RPG”,和后面的“ Maker XP”组合在一起,从而输出一个新的字符串。
这和以下的脚本一样,不过上面的用法就灵活多了。
game = RPG
print game + Maker XP" # RPG Maker XP
复制代码
唯一要注意的一点,
内镶表达式不可以用在 单引号 ' '中,会无效的
game = RPG
print '#{game} Maker XP' # #{game} Maker XP
复制代码
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:35
本帖最后由 「旅」 于 2011-7-30 11:27 编辑
08.循环
重复进行特定的处理就要使用循环。
while ~ end
在满足特定条件期间进行循环的情况下使用 while 语句
a = 0 # 为变量 a 赋值代入 0。
i = 1 # 为变量 i 赋值代入 1。
while i = 5 # 当变量 i 为 5 以下时循环开始(重复以下处理), a += i # 变量 a 加上 i 的值。 i += 1 # 变量 i 的值增加 1。
end # 循环结束。
p a # 显示计算结果。
复制代码
这个示例是求从 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 的值
初始状态
1 次后
2 次后
3 次后
4 次后
5 次后
循环5次后,在a的数值里面实际上进行了1+2+3+4+5的计算,i的值也超过5而执行end使得循环结束。
然后以 p 命令显示最终 a 的值,就会显示出*** 15。
变化范围
数值的范围,例如类似于「从 1 到 5」这样的概念就称为变化范围
复制代码
上述示例表示「从 1 到 5」的意思。使用 .. 运算符,就能作成一个变化范围。
而且,使用 ... 运算符也可以。
复制代码
... 和 .. 不同的是「不含最后一个数」
。所以,这种情况实际上表示的是「从 1 到 4」的意思。
for ~ in ~ end
在变化范围表示的范围内循环的情况下使用 for 语句
a = 0 # 为变量 a 赋值代入 0。
for i in 1..5 # 变量 i 的值按从 1 到 5 的范围变化, a += i # 变量 a 加上 i 的值。
end # 循环结束。
p a # 显示计算结果。
复制代码
这个示例和使用 while 语句的示例完全相同,也是求从 1 到 5 这五个数字总和的程序,但比使用 while 的情况更加简洁。在 while 中变量 i 加上 1 表示的是从 1 到 5 的范围,然而在 for 中是用变量 i 按「从 1 到 5 的范围」的顺序代入来表示。表面看起来不同,但实际上进行的是意思完全相同的处理。
Ruby 中有许多语法,循环中也存在各种各样不同的方法。在不同语法使用中,请按照这个示例提示的「让编写更简便」的方式来思考。实际上,如果理解了条件分歧和循环的话,就能进行大部分逻辑运算了。
loop do ~ end
未指定循环次数和条件的情况下,也就是
想进行无限循环时使用 loop 语句
。这个与 while 和 for 语句的性质稍微有所不同,一般情况下没有必要注意。
i = 0 # 为变量 i 赋值代入 0。
loop do # 循环开始。 i += 1 # 变量 i 的值增加 1。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
这个示例是「一边把 i 的值加上 1,一边显示 i 的值」的程序,没有结束条件。一旦运行的话就会连续显示 1、2、3……。如果这种对话框不断显示的话,就算要结束程序也是不可能的,只能按着 F12 键不放强行关闭对话框,并点击右上方的结束按钮关闭程序。
想中途中断循环就要使用 break 命令
i = 0 # 为变量 i 赋值代入 0。
loop do # 循环开始。 i += 1 # 变量 i 的值增加 1。 if i == 5 # 如果变量 i 的值为 5 的话, break # 中断循环。 end # 条件分歧结束。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
上述示例在程序中加上了「i 等于 5 的就中断循环」的条件。运行该程序,显示 1、2、3、4 就结束了。
break 即使在 while 和 for 等其它方法作成的循环中也能使用。
在不中断循环的情况下,跳过本次循环而进入下一次循环时使用 next 命令
for i in 1..5 # 变量 i 的值按从 1 到 5 的范围变化, if i == 3 # 如果变量 i 的值为 3 的话, next # 进入下一次循环。 end # 条件分歧结束。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
运行这个示例,会显示 1、2、4、5。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:35
本帖最后由 「旅」 于 2011-7-30 11:32 编辑
扩展篇37.另一种注释
我们在最开始学习脚本时就学习过注释的方法,还有就是”注释后面的内容不会影响正常脚本的运行”。今天我们来继续学习另一种注释的方法。
如果有试过在脚本前写注释的同学应该都有感觉,就是用#那样做实在是太麻烦了。例如:
# 大家好我叫做懒散王
# 今天我写了一个脚本
# 这个脚本有很强大的功能
# 例如说他可以OXXOXX
# 很厉害吧
# 想要使用他的话你可以OXXOXX
# 这样就可以了
复制代码
(不要吐槽范例.)例如这样的一个注释,又因为作者废话很多,这种写法就麻烦很多了。
所以可以用这种写法,超方便的嘎嘎。
大家好我叫做懒散王
今天我写了一个脚本
这个脚本有很强大的功能
例如说他可以OXXOXX
很厉害吧
想要使用他的话你可以OXXOXX
这样就可以了
复制代码
是不是很方便。
只需要把注释内容放入 =begin 到 = end 的中间就行了
。好了教程就到这了。
终于考完试了.撒花~
您需要登录后才可以回帖
发表回复
回帖后跳转到最后一页
GMT+8, 2011-8-1 04:25
Powered by
2001-2011
积分 0, 距离下一级还需
回顶部自动登录 密码
登录 让不懂编程的人也能做出精美的游戏来。
高效编辑、画面流畅、RGSS2脚本系统
动作游戏制作大师
查看:
回复:
[讨论]
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
3 天前
本帖最后由 「旅」 于 2011-7-31 20:50 编辑
写作初衷:
也许只是我个人理解有问题,但确实有种感觉,最开始接触的无论是脚本入门还是站上的各种教程时,总是不习惯一大堆的理论内容,而又经常找不到半句相关的代码,于是最终总因不知所云而放弃。除此之外,自己比较想知道的例如
生成图片
保持读取
的问题也根本看不到踪迹,弄得自己更加头大。所以正是因此,自己一直希望写出一个能适合和我有同样遭遇的同学的教程。趁着暑假的到来,希望完成这个想法,请大家支持我
注意事项:
1.这个教程是更多的是面向那些为了制作出更精美游戏的制作者而写的,如果你单纯是为了学习编程的话,我个人不推荐这个教程。
2.脚本是比较抽象的事物,学习起来会比较辛苦,所以一定要先确保自己真的有一份制作游戏的热情,能不能学好都看你的觉悟。
3.这个教程最开始的部分会复制脚本入门的内容(偷懒),但很多地方都有修改,会尽力更加适合新人观看的。
4.基础篇09-12是完全新写的教程,而且里面的内容很重要,新人可以观看。(暂时在Word里,等下放到论坛)
麻烦大家啦:
可能有些错别字或讲解错的内容之类,希望察觉的同学可以帮忙回帖提示下。有什么好建议或疑惑也可以回帖
感谢大家的支持
好人卡
小旅什么的最萌了~
抱抱师姐
旅姐加油啊
旅姐姐大触
旅酱辛苦了
总评分: 经验 + 935 好人卡 + 2 VIP + 4 终于考完试了.撒花~
当前离线
最后登录
2011-7-30
好人卡
在线时间
54 小时
注册时间
2010-10-10
剑士, 积分 11, 距离下一级还需 1 积分
1 好人卡
27 经验
在线时间
54 小时
注册时间
2010-10-10
发表于
前天 09:51
本帖最后由 「旅」 于 2011-7-30 23:33 编辑
01. 写在前面(主楼)
(基础篇)
02. 03. 04. 05. 06. 07. 08. 09. 10. 类和实例
11. 认识内部类
12. 类的属性
13. 显示图片
14. 数组
15. 哈希表
(解读篇1)
16. 数据库
17. 场景类
18. 游戏对象
19. 精灵
20. 窗口
21. 讲解Bitmap
22. Main
(解读篇2)
23. Selectable
24. 对话框
25. 保存与读取
26. 编译器
(解读篇3)
27. Rect Viewport
28. Table
29. Color Font Tone
30. RPG::Weather Tilemap
31. 冷门类的讲解
32. 错误Error
(扩展篇)
33. Plane
34. 常量
35. 模块
36. alias的用法
37. 38. 39. 40. Proc
41. 脚本运行的效率
42. lit的用法
43. egin
44. 几何图形的描绘
因为另一个我,所以,要抛弃过去了。
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 09:55
本帖最后由 「旅」 于 2011-7-30 10:03 编辑
02.脚本的介绍
什么是脚本:
脚本语言是一种独特的简单语言,RPGXP 采用的是 Ruby 脚本语言。Ruby 的官方网页是
Ruby 是松本行弘先生开发的免费软件,描述大规模的游戏也能保持良好性能。是善长文本处理的语言,照原样会加大游戏开发的难度。因此,对游戏开发用途的 Ruby 语言进行了特殊化,这就是 RGSS(Ruby Game Scripting System),中文意思就是 Ruby 游戏脚本系统。
总而言之,RGSS是Ruby的特殊化(稍微加了些东西),而脚本是以RGSS为基础来编写的事物就是了。你要把脚本说成RGSS或Ruby都可以。 .默认下脚本文件是 游戏目录/Data/Scripts.rxdata 在里面存放的就是代码的数据了。
脚本有什么用:
只要你有技术,它可以帮助你做出一切你想要的游戏。技术稍浅的同学,整合、修改站上的各种脚本都够你用的了。如果技术足够,又富含想象力,那么一个惊天地泣鬼神的银河系统(大雾)也将自然不在话下,只要你努力~!
学脚本需要什么条件:
1.热情
2.信心
3.耐心
无论你现在只是上小学或是初中,无论你英语数学考得多么糟糕,不要觉得脚本就和自己没有任何关系了。
1.论坛上很多学会脚本的人都和你一样也在读小学和初中,而他们也并非所谓的天才只是普普通通的人,但不同的是他们坚信自己能够学好脚本,所以他们做到了!
2.学习脚本或是教程,”真正需要你记住”的英语单词少之又少,具体为什么以后再讲,总之不要给自己找借口!
3.第三,制作游戏需要的数学基础很少,所以也不要担心这点。
总而言之,只要有信心,每个人都可以学好脚本。
学习脚本的好习惯:
量力而为
。做人要醒目,不要横冲直撞。每次看脚本不要过久,大概50分钟后可以休息一下,这样既可以事半功倍,还可以防止因为厌烦情绪导致的学习信心下降。
即时复习
。虽然每次看完脚本都会有种云里雾里的感觉,这很正常。先休息一天,到了第二天复习时便会时不时有感觉到”昨天看起来很复杂的东西,今天却领悟到了什么”这样奇妙的滋味。
不要懒惰
。每一段在教程里出现的代码都应该自己亲自改改、试试,这样才能学的牢固。
不耻下问
。有问题别自己纠结,可以到论坛寻求帮助,在论坛里学习的贴子总都会得到热心回答的哦。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:08
本帖最后由 「旅」 于 2011-7-30 11:03 编辑
03.开始
新建脚本:
首先打开脚本编辑器,可以用快捷键F11直接打开。打开之后,在左边那里右键选择插入,
下面的名称可以随便取,他不会有任何的影响
。恩这样就建立了我们第一个脚本页。
结束程序:
接下来我们来执行一下下面这段代码,
注意,在 Ruby 中是区分字母大小写的,所以不能输入 EXIT 或 Exit。当然全角文字也不行。请全部以半角的小写字母输入。输入完毕按”确定”键关闭脚本编辑器,运行(游戏测试F12)看看吧。
运行游戏测试,窗口应该显示一瞬间后立即关闭。因为
exit是结束程序的代码
,所以一进去就被退出来了。
显示数据:
在写脚本时经常会用到的一个代码就是p了,它的作用很大。
很多数据都可以用p显示出来
。例如:
p “66RPG”
注释:
有时脚本写起来会比较多行,内容会比较复杂,所以
为了避免忘记某段脚本是什么意思,所以可以利用#来说明
。例如:
p 123 # 我只是打酱油的
exit # 我只是路过的
你可以试试把#和后面的文字去掉,它的效果和有加上#时是一样的。所以说,
在#后面的内容是不会影响到脚本的运行
点评 口胡那是字符串那节课的~~~ 发表于
前天 10:14 #{}呢 发表于
前天 10:13
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:17
本帖最后由 「旅」 于 2011-7-30 11:05 编辑
04.数字的计算
Ruby 中能使用的数字,包括整数和浮点数两种。
p 3 # 整数
p 52 # 整数
p -99 # 整数
p 1.5 # 浮点数
p 3.0 # 浮点数
所谓浮点数,就是有小数点的数
。数值相同的话写作 3 是整数,而写作 3.0 即是浮点数。整数计算速度快,如果不需要小数点以下的话尽量使用整数。
计算方法
在 脚本编辑器 输入这些计算内容吧。
p 1 + 1 # 加法
p 10 - 3 # 减法
p 7 * 5 # 乘法
p 24 / 4 # 除法
这样,写上普通算式就会输出计算的结果。
优先顺序
和普通的数学算式一样,* 和 / 计算要优先于 + 和 - 计算。想改变这个顺序就要
使用括号 ( ),括号中的算式将会优先计算
。 .注意不要用()而应该用()才对。
p 2 * 2 + 3 * 4 # 16
p 2 * (2 + 3) * 4 # 40
p 2 * (2 + 3 * 4) # 28
按优先顺序,示例第一行其实是 4+12,第二行是 2*5*4,第三行是 2*14,所以会是不同的计算结果。
括号还可以多层重叠起来,例如:
p (2 * (3 + 4)) – 5
小数点以下的计算
整数除整数的情况下,会省略余数,***将还是整数
。想得到小数点以下的***,就要使用到浮点数。
除数或被除数至少要有一个是浮点数(明确标明了小数点以下),计算的***就会是浮点数
p 15 / 4 # = 3
p 15.0 / 4 # = 3.75
p 15 / 4.0 # = 3.75
余数的计算
求余数(除法的余数),是使用 % 符号
p 14 % 4 # = 2
p 13 % 4 # = 1
p 12 % 4 # = 0
不知道什么是余数的同学可以去百度查一下,因为余数这样东西在以后写脚本时大有用途。
乘方的计算
乘方(同一个数指定次数的相乘)是使用 ** 符号
p 2 ** 4 # = 16
这个示例求 2 的 4 次方,计算 2*2*2*2,也就是2连续乘以4次的意思。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:33
本帖最后由 「旅」 于 2011-7-30 11:07 编辑
05.变量
脚本里变量是一个很重要的东西,几乎每段代码都会涉及到变量。让我们一起来学习变量的基础知识。
变量的命名
我们可以为变量取比如 x 和 y 或者更长的像 level 或 gold 这样的名称。名称的长度没有限制。
变量有几个类型,首先我们来学习最基本的
局部变量
。局部变量的命名规则有以下几点。其中的第 1 条应该特别注意。
1.第一个字符必须以小写英文字母或 _(下划线)开头。
2.第二个字符开始可以使用英文字母、数字或 _(下划线) 。
3.不能使用保留字作变量的名称。
保留字是作为 Ruby 中具有特殊意义的词而被系统所「保留」,所以变量名称不能使用。以下就是系统的保留字。
alia def false nil retur unle and do for ot elf until
begi else if or super when
break elsif i redo the while
case end module rescue true yield
cla e ure ext retry undef
除上面列出的保留字以外,其它的词都可以作变量的名称。
赋值和引用
在实际中使用变量看看吧。
p x + y # 7
第一行和第二行是进行变量的赋值。其中 = 号是赋值运算符。
和数学上使用等号表示「左边等于右边」的意思不同,这里表示「左边的变量代入右边的数值」
。在上述示例中,第一行 x 变量和第二行 y 变量分别代入数值 3 和 4。
第三行是引用变量 x 和 y。所谓引用就是取得那个变量的数值。变量的计算和数字的计算方法完全一样。这里的 x + y 可以解释为 3 + 4,计算结果就为 7。
另外,
引用从未进行赋值的局部变量,就会使程序出现错误
p zzz # 系统会提示错误
请记住,变量一定要进行赋值后才能使用。
zzz = 5
p zzz # 5
这个示例中,第一行变量 zzz 为其赋值代入 5 后,第二行引用。
自运算
变量引用自己的数值,并再次代入计算结果称为自运算
p x # 10
第二行的 x += 7 相当于 x = x + 7,总之就是向变量 x 里加上 7。同样 -=、*=、/=、%= 等也是如此使用。这些运算符就是自运算运算符。
这个示例中第一行是赋值直接代入 1,第二行加上 7,这时 x 的值其实是 8,第三行减去 3,第四行再乘以 2,最后的计算结果就是 10。
全局变量
局部变量是暂时使用的变量,只能在方法和类等定义(在后面讲述)内部使用,之外变量就无效。与之相对,
在程序任何地方都能引用的就是全局变量
。全局变量可以在程序中任何地方使用,名称相同,就必然是同一个变量。
如下面的示例,以 $ 号开头的变量就作为全局变量使用。赋值方法和局部变量完全相同。
$global
虽然在任何地方都能引用,但使用全局变量不一定比局部变量好。
全局变量十分强大,胡乱使用恐怕会使程序变得很难懂,而且因为它会一直存在,导致内存的浪费。请在使用时注意
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:34
本帖最后由 「旅」 于 2011-7-30 11:10 编辑
06.条件分歧
满足特定的条件与否,之后的动作会根据其不同而改变就叫作条件分歧。
比较运算符
在具体地学习处理条件分歧的方法之前,要先记住条件构成中使用的运算符。
下面 6 个运算符称为
比较运算符
。使用这些运算符,和给予条件(数字和字符串)相比较,然后返回结果。
== 相等
!= 不相等
小于
大于
= 小于或相等
= 大于或相等
这里一定要注意的是,
判断相等的运算符不是 = 而是 ==
。像已学习过的那样,所谓 = 符号表示的不是比较而是代入。请注意不要弄混淆了。
真伪值
比较运算的运算结果就称为真伪值
。有真(正确)、伪(错误)两种情况。
比较后是
正确的话为 true 值,是错误的话就为 false 值
。请试试看吧。
p (早安 == 早安) # true
p (早安 == 晚安) # false
p (3 + 1 == 3 + 5) # false
p (3 + 1 == 2 + 2) # true
复制代码
逻辑运算符
下面 6 个运算符称为
逻辑运算符
&am am 「~,与,~」的意思
|| 「~,或,~」的意思
! 「非~」的意思
英文单词运算符和符号运算符,无论用哪个都是一样的。在预置脚本中运用的主要是英文单词。使用这些逻辑运算符就能指定更加复杂的条件。
p (100 77 and 1 + 1 == 2) # true
p (100 77 &am am 1 + 1 == 2) # true
复制代码
上述示例中,第一行和第二行表示的都是一个内容「100 大于 77 同时 1 + 1 等于 2」。不用说 100 是比 77 大的整数,1 + 1 ***也为 2,两个运算都成立。所以输出结果就为 true(真,正确)。
那么,看下一个算式吧。
p (1 + 1 == 3 or 2 + 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 (not true) # false
p (! true) # false
复制代码
上述示例中的内容是「非 true」的意思,所以输出结果为 false。
if ~ elsif ~ else ~ end
if ~ end 语句是条件分歧的句法
。这个和英文的 if(如果~就)意思相同,表示「如果 if 后面的条件成立的话,就运行下面的处理」的意思。下面示例中的 3~5行就是条件分歧。
a = 20 # 为变量 a 赋值代入 20。
if a = 10 # 如果 a 为 10 以上的话, rint " ig" # 显示 big。
end # 分歧结束。
复制代码
在条件不满足时也要进行处理的情况下就使用 else,条件不满足但指定另一个条件的情况下就使用 elsif。
a = 7 # 为变量 a 赋值代入 7。
if a = 10 # 如果 a 为 10 以上的话, rint " ig" # 显示 big。
elsif a = 5 # 除此之外,如果 a 为 5 以上的话, rint medium" # 显示 medium。
else # 其他, rint " mall" # 显示 small。
end # 分歧结束。
复制代码
unle ~ end
与 if 相反,
在条件不满足时才进行某些处理的情况下使用 unle 语句
a = 7 # 为变量 a 赋值代入 7。
unle a = 10 # 如果 a 不为 10 以上的话, rint " mall" # 显示 small。
end # 分歧结束。
复制代码
case ~ end
在条件为特定的变量值进行分歧的情况下使用 case 语句
会更方便。
a = 0 # 为变量 a 赋值代入 0。
case a # 分歧开始。
when 0 # 当 a 为 0 时, rint 零" # 显示 零。
when 1 # 当 a 为 1 时, rint 壹" # 显示 壹。
when 2 # 当 a 为 2 时, rint 贰" # 显示 贰。
end # 分歧结束。
复制代码
把第一行 a = 后面的 0 改为 1 和 2,然后再来看看分歧的结果吧。当 a 代入 1 时会显示“壹”,代入 2 时会显示“贰”。
条件运算符
使用符号 ? 和 : 也是运算符形式的条件分歧语句
p (a = 10 ? " ig : " mall) # = " mall
复制代码
这个示例的意思是,变量 a 的值在 10 以上的话就显示 " ig, 9 以下的话就显示 " mall。条件运算符的语法是「条件 ? 真时的值 : 伪时的值」。上述的条件是 a = 10,真时的值为 " ig,伪时的值为 " mall,会根据条件是否满足来决定使用 ? 或 : 的值。
当然使用 if 语句也能完成同样的事情。
if a = 10 " ig
else " mall
复制代码
使用 if 语句的语法会像上面写的那样,但是使用条件运算符语句会更加简洁。该语句在当前的脚本中也使用得很多,所以最好事先记住。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:34
本帖最后由 「旅」 于 2011-7-30 11:11 编辑
07.字符串
一般来说,
由文字连接起来的数据就称为字符串
双引号 或单引号 '' 中间的部分,就作为字符串数据使用。
p RPG Maker XP" # RPG Maker XP
p 'RPG Maker XP' # RPG Maker XP
复制代码
p 命令会导致双引号和字符串一起输出,所以可以使用 print 命令代替。
print RPG Maker XP" # RPG Maker XP
复制代码
这次双引号就没有了。
print 和 p 相似,但它只显示字符串本身。
为变量赋值
和数字一样,
字符串也能代入变量为该变量赋值
a = RPG Maker XP
print a # RPG Maker XP
复制代码
字符串
也能作加法
,字符串加上字符串,就会得到一个连接起来的字符串为***。
a = 我的
b = RPG Maker XP
print a + # 我的 RPG Maker XP
复制代码
还可以作乘法
,字符串乘以一个整数,就会得到该整数次重复的字符串为***。
a = RPG Maker XP
print a * 2 # RPG Maker XPRPG Maker XP
复制代码
控制码
这个东西在原来的脚本入门里有讲,但其实学了也没有太大的意义,所以这里就不讲了,没看过的同学可以去脚本入门稍微过目一下,不过不用太在意就是了。
内嵌表达式
在字符串里面,
可以用 #{变量名} 的形式把变量的内容嵌入在字符串当中
game = RPG
print #{game} Maker XP" # RPG Maker XP
复制代码
上述示例里,第一行是为 game 变量赋值代入字符串“RPG”。第二行里面,其中 #{game} 是表示直接嵌入变量 game 的值字符串“RPG”,和后面的“ Maker XP”组合在一起,从而输出一个新的字符串。
这和以下的脚本一样,不过上面的用法就灵活多了。
game = RPG
print game + Maker XP" # RPG Maker XP
复制代码
唯一要注意的一点,
内镶表达式不可以用在 单引号 ' '中,会无效的
game = RPG
print '#{game} Maker XP' # #{game} Maker XP
复制代码
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:35
本帖最后由 「旅」 于 2011-7-30 11:27 编辑
08.循环
重复进行特定的处理就要使用循环。
while ~ end
在满足特定条件期间进行循环的情况下使用 while 语句
a = 0 # 为变量 a 赋值代入 0。
i = 1 # 为变量 i 赋值代入 1。
while i = 5 # 当变量 i 为 5 以下时循环开始(重复以下处理), a += i # 变量 a 加上 i 的值。 i += 1 # 变量 i 的值增加 1。
end # 循环结束。
p a # 显示计算结果。
复制代码
这个示例是求从 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 的值
初始状态
1 次后
2 次后
3 次后
4 次后
5 次后
循环5次后,在a的数值里面实际上进行了1+2+3+4+5的计算,i的值也超过5而执行end使得循环结束。
然后以 p 命令显示最终 a 的值,就会显示出*** 15。
变化范围
数值的范围,例如类似于「从 1 到 5」这样的概念就称为变化范围
复制代码
上述示例表示「从 1 到 5」的意思。使用 .. 运算符,就能作成一个变化范围。
而且,使用 ... 运算符也可以。
复制代码
... 和 .. 不同的是「不含最后一个数」
。所以,这种情况实际上表示的是「从 1 到 4」的意思。
for ~ in ~ end
在变化范围表示的范围内循环的情况下使用 for 语句
a = 0 # 为变量 a 赋值代入 0。
for i in 1..5 # 变量 i 的值按从 1 到 5 的范围变化, a += i # 变量 a 加上 i 的值。
end # 循环结束。
p a # 显示计算结果。
复制代码
这个示例和使用 while 语句的示例完全相同,也是求从 1 到 5 这五个数字总和的程序,但比使用 while 的情况更加简洁。在 while 中变量 i 加上 1 表示的是从 1 到 5 的范围,然而在 for 中是用变量 i 按「从 1 到 5 的范围」的顺序代入来表示。表面看起来不同,但实际上进行的是意思完全相同的处理。
Ruby 中有许多语法,循环中也存在各种各样不同的方法。在不同语法使用中,请按照这个示例提示的「让编写更简便」的方式来思考。实际上,如果理解了条件分歧和循环的话,就能进行大部分逻辑运算了。
loop do ~ end
未指定循环次数和条件的情况下,也就是
想进行无限循环时使用 loop 语句
。这个与 while 和 for 语句的性质稍微有所不同,一般情况下没有必要注意。
i = 0 # 为变量 i 赋值代入 0。
loop do # 循环开始。 i += 1 # 变量 i 的值增加 1。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
这个示例是「一边把 i 的值加上 1,一边显示 i 的值」的程序,没有结束条件。一旦运行的话就会连续显示 1、2、3……。如果这种对话框不断显示的话,就算要结束程序也是不可能的,只能按着 F12 键不放强行关闭对话框,并点击右上方的结束按钮关闭程序。
想中途中断循环就要使用 break 命令
i = 0 # 为变量 i 赋值代入 0。
loop do # 循环开始。 i += 1 # 变量 i 的值增加 1。 if i == 5 # 如果变量 i 的值为 5 的话, break # 中断循环。 end # 条件分歧结束。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
上述示例在程序中加上了「i 等于 5 的就中断循环」的条件。运行该程序,显示 1、2、3、4 就结束了。
break 即使在 while 和 for 等其它方法作成的循环中也能使用。
在不中断循环的情况下,跳过本次循环而进入下一次循环时使用 next 命令
for i in 1..5 # 变量 i 的值按从 1 到 5 的范围变化, if i == 3 # 如果变量 i 的值为 3 的话, next # 进入下一次循环。 end # 条件分歧结束。 i # 显示变量 i 的值。
end # 循环结束。
复制代码
运行这个示例,会显示 1、2、4、5。
终于考完试了.撒花~
当前离线
最后登录
2011-7-31
好人卡
在线时间
520 小时
注册时间
2008-5-24
小柯的徒弟
御灵的宠物
163 好人卡
2 经验
在线时间
520 小时
注册时间
2008-5-24
发表于
前天 10:35
本帖最后由 「旅」 于 2011-7-30 11:32 编辑
扩展篇37.另一种注释
我们在最开始学习脚本时就学习过注释的方法,还有就是”注释后面的内容不会影响正常脚本的运行”。今天我们来继续学习另一种注释的方法。
如果有试过在脚本前写注释的同学应该都有感觉,就是用#那样做实在是太麻烦了。例如:
# 大家好我叫做懒散王
# 今天我写了一个脚本
# 这个脚本有很强大的功能
# 例如说他可以OXXOXX
# 很厉害吧
# 想要使用他的话你可以OXXOXX
# 这样就可以了
复制代码
(不要吐槽范例.)例如这样的一个注释,又因为作者废话很多,这种写法就麻烦很多了。
所以可以用这种写法,超方便的嘎嘎。
大家好我叫做懒散王
今天我写了一个脚本
这个脚本有很强大的功能
例如说他可以OXXOXX
很厉害吧
想要使用他的话你可以OXXOXX
这样就可以了
复制代码
是不是很方便。
只需要把注释内容放入 =begin 到 = end 的中间就行了
。好了教程就到这了。
终于考完试了.撒花~
您需要登录后才可以回帖
发表回复
回帖后跳转到最后一页
GMT+8, 2011-8-1 04:25
Powered by
2001-2011
积分 0, 距离下一级还需
回顶部