- 注册时间
- 2004-8-19
- 最后登录
- 2008-2-23
⑥精研
流氓甲
- 积分
- 3451
|
跟我一起学ruby——第一天
* 注:本教程在http://www.diyrpg.com/上发表,授权给幻想森林论坛使用。版权属于作者Tiger。其他人转载需要注明出处。
自序
从今天起我就要开始学Ruby了。怎么样,没见吧?一个新人写教程。就凭我坚强的毅力,科学的自学方法,以及我的钻研精神,我有信心学通Ruby,而同样是新手的你也可以!由于本教程是菜鸟教莱鸟若有什么不对的地方还请前辈指教!如果没人看,就当我自愚自乐了。
卷首语
--------------------------------------------------------------------------
准备知识
一、为什么要学Ruby?
不用说一定是帮助发挥RM的潜力啦。而Ruby有多好多坏都与我无关,因为我学它只为了一个原因--RM!
二、什么是Ruby?
它是一种纯粹的面向对象编程的脚本语言。这就像C语言啦,就是一种电脑听得懂的语言,就好比你对电脑大叫一声“我要上网”它是不会让你上网的,必须通过一种语言来告诉它,Ruby就是其中之一,当然Ruby也要用打的,不是用说的...
三、学Ruby要准备啥?当然是RM了,我还准备了三个东西:
1.笔记本--别看不起它,这可是重中之重,你的一些疑问与炅感、研究得出的结论都可记在上面.
2.一个新工程,我暂时把它命名为Test,它将用研究与实践.
3.另一个新工程,我暂时把它命名为标准,它的作用是万一你把自带的Ruby改得面目全非,有它可以做参照。当然RM的脚本数据是保存在 Data 文件夹内的 Scripts.rxdata 文件中的,你也可以对此文件进行备份。
--------------------------------------------------------------------------
实践基础
一、关于脚本脚本编辑器:
1.RM中,进入脚本脚本编辑器的方法是按F11或在主菜单「工具」菜单中选择「脚本编辑器」。。
2.脚本编辑器中一些快捷键(感谢carol3,这不是我发现的):
tab:可以跳格、能够自动进行缩进
ctrl + 鼠标滚轮 : 调整文字的大小
ctrl + F:查找本页脚本
ctrl + shift + F:查找所有脚本
ctrl + H:替换
ctrl + A:全选
ctrl + C,ctrl + V:拷贝粘贴
ctrl + Z,ctrl + Y:撤销与重做
F3:和ctrl + F配套使用,"查找下一个"
F4,F5:选择上一个/下一个脚本
F6:把现在选的这一行命名为本脚本名
ctrl + enter:保存并关闭本窗口
二、创建程序的步骤:
1.确定程序的目标-比如你的目标是做一个求三角形面积的程序。
2.确定要使用什么样的方法-我知道S=1/2ah=1/2abSinC,求角度太烦,且后者不是单独的乘除运算,故吾选前者。
3.创建程序。
三、编程中应养成的好习惯:
1.写注释。很多人认为写注释是在浪费时间——但别忘了——当你在写代码时,也许你的思路清楚;然而当程序逐渐变大,或当你面对几个月前写的代码时,注释的作用就显而易见了。
在 Ruby 中,# 符号后面的一整行文字会认定为注释。当你要写大块的注释时, 也可以用 =begin 和 =end 的中间的一切为注释。
注释是绿色的,不会执行,不会影响到程序的运作,只作为编写者标记的备忘记录来使用。
2未完成...
四、编译错误的看法
当你拼写、语法有错误了,程序就会停止运行,并告诉你相关的信息,此时再按F11进入脚本编辑器,就会看到光标放在了出错的那一行。
如图:
12行:未初始化的常量“Persond”
具体的方法我还没有总结。未完成...
--------------------------------------------------------------------------
Type&Run
(本来下文是不准备发的,但有人说本教程写的有些脱离RM,所以发了下文——不准备发的原因是我不知道carol3的“RGSS区置顶脚本整理中,目前收集脚本:30,望大家添加”一帖中竟然有教程!而且有一部分与我的几乎一样,算了,为了保证教程的完整性,我就把我写的发上来了...绝非抄袭!)
让我们来入手Ruby:
实践:标题画面的部分自定义
实践目的:
1.学会Ruby的研究方法。
2.学会根据注释来做一些实验。
3.熟练脚本编辑器中一些快捷键的使用。
打开脚本脚本编辑器
1.在脚本脚本编辑器的左边找到scene_title
2.可以在右边的筐架中看到第一行:
#==============================================================================
# Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类
#==============================================================================
我们知道这是注释,它的意思就是说scene_title这代码是用于处理标题画面的。同理,我们可以随便看看其它的组(组就是类似scene_title的在脚本脚本编辑器的左边的一窜一窜的代码),怎么样,它们的用途一目了然吧!
3.既然知道它是用于处理标题画面的,我们就拿它开刀吧!
游览一下:读取数据库;生成系统对象;...这些都太深奥了在往下看——
s1 = " 新游戏"
s2 = " 继续"
s3 = " 退出"
终于看到了熟悉的中国字了,呵!这不是RM中标题画面的选项吗!
看看它上面的注释——生成命令窗口。果然是标题画面的选项。
我们改了它试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
按ctrl + enter:保存并关闭本窗口。
再按F12运行游戏。果然成功了!
4.人的野心总是无限的,我还想添加一个关于本游戏!好再试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
5.贪得无厌总有一些心虚,再看看它下面的内容再运行游戏吧!
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
有x、y大盖是在说选项的框框吧!糟了,多了一个选项,框框就一定要变长,如果不去修该框框的属性选项会出现选项无法显示出来的情况。管它呢!就算是真的我也无能为力...
第一行有个(192, [s1, s2, s3])s1,s1,s3好象与s1 = "新的轮回"等中的s1,s1,s3说的是同一个东西吧?既然我加了s4,就得把s4也加进去:
@command_window = Window_Command.new(192, [s1, s2, s3,s4])
s4;s3之间学它样也用 , 连接。
6.再运行游戏。果然出现了关于本游戏选项而且框框也能自动调整把四个选项纳入其中。可见我们刚才的猜测是错的,有x、y大盖是在说框框
的位置?
由图可知:红色框中的星星与框框上端的相对位置在修改前后没有变过,而蓝框中框框下端与RPG字符的相对位置的相对位置发生了变化,也就是说,框框上端的位置是不变的,当有新的选项时,自动延伸框框的下端。而有x、y大盖是在说选项的框框的上端的位置?
7.再试试:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
s5 = "asd"
s6 = "sdasd"
s7 = "weqw"
@command_window = Window_Command.new(192, [s1, s2, s3,s4,s5,s6,s7])
果然,有标题显示不出了。
8.再看看:
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
@command_window = Window_Command.new(192, [s1, s2, s3,s4,s5])
这会出错。
s1 = "新的轮回"
s2 = "旧的回忆"
s3 = "随风而逝"
s4 = "关于本游戏"
@command_window = Window_Command.new(192, [s1, s2, s3])
关于本游戏将不会被显示。
9.现在的关于本游戏还无用处。我们可以参照"新的轮回""旧的回忆""随风而逝"来给它功能。凡是它们有的我都给关于本游戏加上。往下看,注意到有:
def update
@command_window.update
# 按下 C 键时
if Input.trigger?(Input::C)
case @command_window.index
when 0 # 新游戏
command_new_game
when 1 # 继续
command_continue
when 2 # 退出
command_shutdown
end
end
end
when-当...时,这好象类似条件分歧的条件部分,注释告诉我这是选择新游戏;继续;退出不同命令的分歧。
那么command_new_game;command_continue;command_shutdown就是动作了。他们会不会是Ruby中已经定义过的东西?如果是那么你为关于本游戏写其它的东西是没用的。那就让关于本游戏和退出共用一个东西吧:
def update
@command_window.update
# 按下 C 键时
if Input.trigger?(Input::C)
case @command_window.index
when 0 # 新游戏
command_new_game
when 1 # 继续
command_continue
when 2 # 退出
command_shutdown
when 3
command_shutdown
end
end
end
运行之,果然是这样!按了关于本游戏就退出了。可见command_shutdown是用来调用退出命令的。那它会不会是Ruby中已经定义过的东西?我们再往下看:
10.
#--------------------------------------------------------------------------
# 命令:新游戏
#--------------------------------------------------------------------------
.
.
.
.
.
.
.
#--------------------------------------------------------------------------
# 命令:继续
#--------------------------------------------------------------------------
.
.
.
.
.
.
.
#--------------------------------------------------------------------------
# 命令:退出
#--------------------------------------------------------------------------
这好象是在分类讨论。它们都以 def xxxxxxx开头,而xxxxxxx的内容就是前面分歧中各选项所对的内容了。可见那它不是Ruby中已经定义过的东西。那就为我们自定义留下了余地:
def update
@command_window.update
# 按下 C 键时
if Input.trigger?(Input::C)
case @command_window.index
when 0 # 新游戏
command_new_game
when 1 # 继续
command_continue
when 2 # 退出
command_shutdown
when 3
abc
end
end
end
复制一下 命令:退出中的内容,并粘贴在退出后,把粘贴的内容中的 def command_shutdown改为def abc。运行之效果和前面一样。
好了就我现在的实力,也只能进行到此了,如果懂一些语法,可以把def asd下面的内容改一改。
--------------------------------------------------------------------------
总结
未完成...
--------------------------------------------------------------------------
作业
1.程序开发的步骤?
2.试着使用脚本编辑器中一些快捷键。
提高题:
试着总结脚本编辑器使用中出现的一些错误类型及其看法。
未完成...
-------------------------------------------------------------------------------------------------------------------------
答案
略
[此贴子已经被作者于2005-8-17 17:22:37编辑过] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|