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

Project1

 找回密码
 注册会员
搜索
查看: 25368|回复: 75
打印 上一主题 下一主题

[RM中级讨论] 跟我从头学脚本(教学翻译)(已发布)

 关闭 [复制链接]

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
跳转到指定楼层
1
发表于 2006-7-24 16:48:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
{/gg}




电子书版本:http://rpg.blue/web/htm/dj79.htm
整理完整版
http://rpg.blue/upload_program/files/上.doc
http://rpg.blue/upload_program/files/中.doc
http://rpg.blue/upload_program/files/下.doc
另外补上战斗系统讲学.....{/gg},这个战斗教学主要讲的是算法。。
http://rpg.blue/upload_program/files/战斗教学.doc
RGSS游戏系统术语列表(比之前那个Near的完整多了)
http://rpg.blue/upload_program/files/RGSSreference--1.doc
http://rpg.blue/upload_program/files/RGSSreference--2.doc

最后的是事件版SLG,变量的超级运用汉化版因为脚本地方失误所以无法全部完成。 操作: 战斗中按B查看行动力AP和敌人数, 按Z地图上攻击
工程:http://rpg.blue/upload_program/files/LnSmiTactcl.rar
脚本部分修改不完整参照(不要代替工程中的脚本, 因为没有完整地找出所有改动地方, 请新建工程查看)http://rpg.blue/upload_program/files/Scripts中文.rar

以上全部转自Creation Asylum



原作者: Dubealex 以及 :Near Fantastica(特别讲)
主讲人(翻译): frantice  (充其量新人一个…..)

已翻译时间;853分钟
补充说明:
为了保证规范,一些重要的术语援引原文不翻译,请见谅!本人基础语法不过关,纯实干派,错误的地方请指出!还有,如果大家觉得不好的话,直接回帖叫我不要更新即可,我不介意的…………还有因为电脑关系,贴上来的时候把半角的都弄成全角了,大家注意改下,不然会出错

这里是开学宣言

大家好,我就是传说中的女F。^0^
今天开始我来边翻译边讲述一些关于RGSS和Ruby的教学,
在翻译的基础上融合了大量自己的心得体会,希望能给大家带来一些收获。对于不知道什么是RGSS和Ruby的新人们,我的建议是先把事件弄懂了,然后再看这个教程.我们这个教学的目标是:能够写出属于自己的简单脚本!

教学大纲:
第一讲: Ruby 和RGSS的概况  
第二,三讲: 基本词汇和语法
特别讲: Near Fantastica的RGSS语法列表
第四,五讲: 变量和常量
第六,七,八讲: 条件语句
第九讲:Loop专题
第十讲:Inheritance专题
第十一-----十七讲(重点): Scene和Window 专题
第十八-----二十讲(也是重点): Selectable/Command 窗口专题



第一讲 什么是Ruby?什么是RGSS?

首先请在工程中按下F1看基本知识
我不重复别人说的话了.Ruby它诞生于1993年2月24日,它是面向对象的解释性语言(即00),任何一种00语言都包含以下4个部分:



-Class 类
-Methods 方法
-Messages
-Arguments
-Variables/Constants 变量和常量
它们之间的关系:---------我讨厌贴图
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/1.JPG


一个对象的例子
假设class为一个汽车制造厂 ,那么目标就是汽车. 汽车制造厂包含所有来制造汽车的功能,每辆车都是一种同样东西的不同形式.这些不同的汽车形式也是不同的对象,也可以在不改变其他汽车对象的基础上在加以改造.当汽车公司需要另一辆汽车的时候, 他们只用简单地向汽车制造厂要求制造一辆新车,只要盖好了一个工厂(就是class-类)你就不需要每次都去重复地对汽车(object 对象)操作了.

一个处理对象的例子
在 RPG Maker XP里, 你的人物都有很多属性,如”名字””HP””等级”等等,这些在游戏里都能打开菜单看到.它们是靠后台执行你所发出的指令来完成显示的.

一种方法事实上定义了目标对象接收到什么信息,接受到会发生什么.所以说,每次消息传送或接收,对象都是和它的制造者(class-类)所关联,靠相关的方法来执行.

回到人物的例子,我们就知道了有一种类专门定义人物,这个类有种为你发给目标对象的信息而生成的方法.然后我们就找到一种叫”name”的方法

什么是RGSS?
“Ruby Game Scripting System”是RGSS的全称,它不是一种语言.鉴于大家都知道它是音乐测试左边那个按扭,其他不多说了.
下面看个例子,一行描绘图片的脚本:

image = Sprite.new
image.bitmap = RPG::Cache.picture(name of picture)

理论上,要在屏幕上显示出图片需要2行脚本,因为你要使用一个叫”Sprite”的类, "Sprite" 在RMXP中已事先编好(不在脚本编辑器中).也需要一个module模块 (也不在脚本编辑器中)

RGSS编辑器
脚本里的字体各有颜色,不同的颜色都有什么含义呢?
蓝色: 语法, 如 def, class, end, when, if, case…..
红色: 数字, 如 1, 2, 3, 4,………….
浅蓝色: 符号, 如+, * , = , || ,
绿色: 注释, 不被执行的内容
紫色: 自己看- -

常用快捷键
Control+F  本脚本页中寻找
Control+Shift+F 全局搜索
Control + H  替换
Control + G  转到第几行
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/2.JPG


第二讲 基本词汇和语法(上)


一些基本的废话将完了,我们直接进入正题^0^..接下来的请大家一起跟我实践~
先在RGSS编辑器中新建一个脚本,插入这些:
class Say_Something
  def initialize
    print “I am therefore I’m coded”
  end
end
然后找个npc并在他事件页的脚本那里写入Say_Something.new
点他后我们看到什么了呢?冒出来一个写着” I am therefore I’m coded”的窗口.
这是为什么呢?让我们来一行一行地看:
class Say_Something  这里我们创建了一个叫Say_Something 的class (类)
def initialize  这里我们定义了一种新的方法叫Initialize (初始化)
print “I am therefore I’m coded” 我们增加了当”initialize”的方法被调用时执行的东西
两个end是语法

我们再进一步学习:
“initialize” 是一种默认的方法,当你在事件中调用脚本时候执行. 脚本语句”Say_Something.new” 你用”new”的信息命令 RMXP 来创建Say_Something的对象
关于end:
哪些词语需要用end来结束呢?看看这个.是不是清楚了点呢?:
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/3.JPG

好了,我们回头看看事件页写的那行” Say_Something.new” ,注意到了吗, 它前面没有写对象, 我们可以试着改为” my_object = Say_Something.new” , 效果是一样的,不过心里舒坦了点吧…….这是为什么呢???
这里我们创建了一个新的目标对象叫”my_object” ,它应该是在”Say_Something”这个class里的,但是我们开头那个”Say_Something “,除了一条信息外空空如也..所以我们没必要在事件那里多一个对象.

那么,我们来给这个空空如也的”Say_Something “类多点什么吧!
重新替换开头那行脚本为:
class Say_Something
attr_accessor :greeting
attr_accessor :name
  def initialize(greeting, name)
    @greeting=greeting
    @name=name
  end
  def say
    print @greeting + “ “ + @name
  end
end
然后在那个npc事件脚本里重新写为:
message1=Say_Something.new(“Hello”, “Alex”)
message2=Say_Something.new(“Hello”, “Peter”)
print message1.name
print message2.name
message1.say
message2.say

执行看,是不是华丽多了?我们看到4个冒出来的窗口.分别显示”Alex”,”Peter”,”Hello Alex”和”Hello Peter”
这里我们创建了两个目标”message1”和”message2”他们都依靠”Say_Something”类,就像第一讲里那个汽车厂的例子一样,改变一个是不会影响另一个的.
那么他是如何运行的呢?请看第三讲.

KRKR + NS 学习中..........

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
2
 楼主| 发表于 2006-7-24 16:48:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
{/gg}




电子书版本:http://rpg.blue/web/htm/dj79.htm
整理完整版
http://rpg.blue/upload_program/files/上.doc
http://rpg.blue/upload_program/files/中.doc
http://rpg.blue/upload_program/files/下.doc
另外补上战斗系统讲学.....{/gg},这个战斗教学主要讲的是算法。。
http://rpg.blue/upload_program/files/战斗教学.doc
RGSS游戏系统术语列表(比之前那个Near的完整多了)
http://rpg.blue/upload_program/files/RGSSreference--1.doc
http://rpg.blue/upload_program/files/RGSSreference--2.doc

最后的是事件版SLG,变量的超级运用汉化版因为脚本地方失误所以无法全部完成。 操作: 战斗中按B查看行动力AP和敌人数, 按Z地图上攻击
工程:http://rpg.blue/upload_program/files/LnSmiTactcl.rar
脚本部分修改不完整参照(不要代替工程中的脚本, 因为没有完整地找出所有改动地方, 请新建工程查看)http://rpg.blue/upload_program/files/Scripts中文.rar

以上全部转自Creation Asylum



原作者: Dubealex 以及 :Near Fantastica(特别讲)
主讲人(翻译): frantice  (充其量新人一个…..)

已翻译时间;853分钟
补充说明:
为了保证规范,一些重要的术语援引原文不翻译,请见谅!本人基础语法不过关,纯实干派,错误的地方请指出!还有,如果大家觉得不好的话,直接回帖叫我不要更新即可,我不介意的…………还有因为电脑关系,贴上来的时候把半角的都弄成全角了,大家注意改下,不然会出错

这里是开学宣言

大家好,我就是传说中的女F。^0^
今天开始我来边翻译边讲述一些关于RGSS和Ruby的教学,
在翻译的基础上融合了大量自己的心得体会,希望能给大家带来一些收获。对于不知道什么是RGSS和Ruby的新人们,我的建议是先把事件弄懂了,然后再看这个教程.我们这个教学的目标是:能够写出属于自己的简单脚本!

教学大纲:
第一讲: Ruby 和RGSS的概况  
第二,三讲: 基本词汇和语法
特别讲: Near Fantastica的RGSS语法列表
第四,五讲: 变量和常量
第六,七,八讲: 条件语句
第九讲:Loop专题
第十讲:Inheritance专题
第十一-----十七讲(重点): Scene和Window 专题
第十八-----二十讲(也是重点): Selectable/Command 窗口专题



第一讲 什么是Ruby?什么是RGSS?

首先请在工程中按下F1看基本知识
我不重复别人说的话了.Ruby它诞生于1993年2月24日,它是面向对象的解释性语言(即00),任何一种00语言都包含以下4个部分:



-Class 类
-Methods 方法
-Messages
-Arguments
-Variables/Constants 变量和常量
它们之间的关系:---------我讨厌贴图
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/1.JPG


一个对象的例子
假设class为一个汽车制造厂 ,那么目标就是汽车. 汽车制造厂包含所有来制造汽车的功能,每辆车都是一种同样东西的不同形式.这些不同的汽车形式也是不同的对象,也可以在不改变其他汽车对象的基础上在加以改造.当汽车公司需要另一辆汽车的时候, 他们只用简单地向汽车制造厂要求制造一辆新车,只要盖好了一个工厂(就是class-类)你就不需要每次都去重复地对汽车(object 对象)操作了.

一个处理对象的例子
在 RPG Maker XP里, 你的人物都有很多属性,如”名字””HP””等级”等等,这些在游戏里都能打开菜单看到.它们是靠后台执行你所发出的指令来完成显示的.

一种方法事实上定义了目标对象接收到什么信息,接受到会发生什么.所以说,每次消息传送或接收,对象都是和它的制造者(class-类)所关联,靠相关的方法来执行.

回到人物的例子,我们就知道了有一种类专门定义人物,这个类有种为你发给目标对象的信息而生成的方法.然后我们就找到一种叫”name”的方法

什么是RGSS?
“Ruby Game Scripting System”是RGSS的全称,它不是一种语言.鉴于大家都知道它是音乐测试左边那个按扭,其他不多说了.
下面看个例子,一行描绘图片的脚本:

image = Sprite.new
image.bitmap = RPG::Cache.picture(name of picture)

理论上,要在屏幕上显示出图片需要2行脚本,因为你要使用一个叫”Sprite”的类, "Sprite" 在RMXP中已事先编好(不在脚本编辑器中).也需要一个module模块 (也不在脚本编辑器中)

RGSS编辑器
脚本里的字体各有颜色,不同的颜色都有什么含义呢?
蓝色: 语法, 如 def, class, end, when, if, case…..
红色: 数字, 如 1, 2, 3, 4,………….
浅蓝色: 符号, 如+, * , = , || ,
绿色: 注释, 不被执行的内容
紫色: 自己看- -

常用快捷键
Control+F  本脚本页中寻找
Control+Shift+F 全局搜索
Control + H  替换
Control + G  转到第几行
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/2.JPG


第二讲 基本词汇和语法(上)


一些基本的废话将完了,我们直接进入正题^0^..接下来的请大家一起跟我实践~
先在RGSS编辑器中新建一个脚本,插入这些:
class Say_Something
  def initialize
    print “I am therefore I’m coded”
  end
end
然后找个npc并在他事件页的脚本那里写入Say_Something.new
点他后我们看到什么了呢?冒出来一个写着” I am therefore I’m coded”的窗口.
这是为什么呢?让我们来一行一行地看:
class Say_Something  这里我们创建了一个叫Say_Something 的class (类)
def initialize  这里我们定义了一种新的方法叫Initialize (初始化)
print “I am therefore I’m coded” 我们增加了当”initialize”的方法被调用时执行的东西
两个end是语法

我们再进一步学习:
“initialize” 是一种默认的方法,当你在事件中调用脚本时候执行. 脚本语句”Say_Something.new” 你用”new”的信息命令 RMXP 来创建Say_Something的对象
关于end:
哪些词语需要用end来结束呢?看看这个.是不是清楚了点呢?:
http://ftp2.66rpg.com/3/临时� ...  Battle Arena/3.JPG

好了,我们回头看看事件页写的那行” Say_Something.new” ,注意到了吗, 它前面没有写对象, 我们可以试着改为” my_object = Say_Something.new” , 效果是一样的,不过心里舒坦了点吧…….这是为什么呢???
这里我们创建了一个新的目标对象叫”my_object” ,它应该是在”Say_Something”这个class里的,但是我们开头那个”Say_Something “,除了一条信息外空空如也..所以我们没必要在事件那里多一个对象.

那么,我们来给这个空空如也的”Say_Something “类多点什么吧!
重新替换开头那行脚本为:
class Say_Something
attr_accessor :greeting
attr_accessor :name
  def initialize(greeting, name)
    @greeting=greeting
    @name=name
  end
  def say
    print @greeting + “ “ + @name
  end
end
然后在那个npc事件脚本里重新写为:
message1=Say_Something.new(“Hello”, “Alex”)
message2=Say_Something.new(“Hello”, “Peter”)
print message1.name
print message2.name
message1.say
message2.say

执行看,是不是华丽多了?我们看到4个冒出来的窗口.分别显示”Alex”,”Peter”,”Hello Alex”和”Hello Peter”
这里我们创建了两个目标”message1”和”message2”他们都依靠”Say_Something”类,就像第一讲里那个汽车厂的例子一样,改变一个是不会影响另一个的.
那么他是如何运行的呢?请看第三讲.

KRKR + NS 学习中..........
头像被屏蔽

Lv1.梦旅人 (禁止发言)

正义先生热血君

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-1-28
帖子
149
3
发表于 2006-7-24 17:04:59 | 只看该作者
支持个...辛苦女F了...{/hx}
不过...这个教学有点复杂...-_-|||
又或者是我理解能力太低.......
另.....
http://ftp2.66rpg.com/3/临时保留/frantice-Star%20Ocean%20Battle%20Arena/3.JPG
这张图打开之后,地址MS会变成这样:
http://ftp2.66rpg.com/3/临时保留/frantice-Star%20Ocean%20Battle%20Arena/3.JPG<br>
顺便,据我所知,紫色的不一定都是显示的文章,应该说是字符串..(吧?)
-_-||
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
4
 楼主| 发表于 2006-7-24 17:10:09 | 只看该作者
……
很复杂的,特别是后面详细得要命……
是字符串…?我改改, 他写的应该是text, 我就直接翻成文章了……= =
开头那几讲翻得不好,自己都看不懂。后面的就好多了
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

正义先生热血君

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-1-28
帖子
149
5
发表于 2006-7-24 17:15:37 | 只看该作者
女F的翻译很好丫....总比我这个万年英文白痴来得好.....{/gg}
另...MS不是叫显示的字符串吧...{/fd}
字符串不一定都可以显示出来的(吧?)......[殴她吧,一点学识都没有,说来说去都是"吧"]
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
6
 楼主| 发表于 2006-7-24 17:17:44 | 只看该作者
{/dk}{/dk}{/dk}
直接删了,跑去看原文…………
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
4939
在线时间
443 小时
注册时间
2006-1-31
帖子
1537
7
发表于 2006-7-24 18:08:11 | 只看该作者
感觉写得不错,为什么没有下文了?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
8
 楼主| 发表于 2006-7-24 23:01:36 | 只看该作者
第三讲 基本词汇和语法(下)


大家应该没忘记上回的内容吧^0^,好,不废话了,今天继续!
我们来看看他的脚本是怎么写的,因为说明较长,所以给脚本标上了行数:

1 class Say_Something   
我们这里创建了一个新的对象叫"message1"它将做为Say_Something的一个instance来使用.也就是说我们对这个对象的任何操作都是在这个Say_Something类里来定义的".我们已经在这个类的initialize方法里添加了Argument 接收器(不明白的见第一讲的图示), 我们需要发送这些argument .那么怎么发送到这个类里呢?和我们处理它的方法一样,在这个类名里列出他们就行了
2 attr_accessor :greeting
我们在这里定义了一个ATTR 值,全称是 Attribute. 我们可以简单地用ATTR_ACCESSOR 来定义一个新的可读可写,适用于由Say_Something创建的任何对象的instance的功能.我们第一个ATTR 的名字叫greeting.
3 attr_accessor :name
定义另一个ATTR, 名字叫name
4 def initialize(greeting, name)
我们定义了一个新的方法initialize.看过前面教学,你大家应该明白这个initialize 的方法是在一个对象由class类创建时,第一个执行的方法.所以我们添加Argument 接受器,那么这个方法可以被接收到了. 在这个例子中, 这些"argument" (ATTR)是"greeting" 和 "name". 我们在冒号的两边放上这些argument接收器和方法的名字. 注意这些"Argument 接受器是 " "接收者"; 也就是说逗号两边的都是变量名,它们在后来还是有用途的.
5 @greeting=greeting
这里我们新定义了一个"Instance 变量" , 他们把"greeting"这个数据传送出去..一个 instance 变量都由 @ 开头,在同类的每个方法中都非常有用.它们都在方法中定义 通过这样我们就能命令RMXP接收"greeting" 并把它放在"@greeting" 里以便其他方法中调用
6 @name=name
同上,不过这回的attribute是”name”
7 end
结束方法initialize
8 def say
定义一个新的叫”say”的方法
9 print @greeting + " " + @name
我们这样编码,当”say”这个信息被对象接收了会怎么样.这里是显示"@greeting"的内容, 一个空号后加入"@name".的内容.
10 end
结束say的方法定义
11 end
结束 Say_Something 这个类

好了,脚本是看完了,再完整地看一遍:
class Say_Something
attr_accessor :greeting
attr_accessor :name
  def initialize(greeting, name)
    @greeting=greeting
    @name=name
  end
  def say
    print @greeting + “ “ + @name
  end
end
是不是不那么扑朔迷离了??

那么接下来看事件页脚本,我们也一行一行地看^0^.
1 message1=Say_Something.new("Hello", "Alex")
我们创建了一个新的目标对象叫"message1" ,它是类"Say_Something"的一个instance (也就是说我们对这个对象的任何操作都是在这个Say_Something类里来定义的).我们在这个类的initialize 方法里已经添加了 "Argument 接受器" , 我们就要发送这些 argument.
2 message2=Say_Something.new("Hello", "Peter")
同1
3 print message1.name
我们用Ruby 的命令"print" 来显示对象"message1"中储存的name名字.大家可以看到, 只用这个类的ATTR中定义过的name 名字就能获得对象的attributes (内容)
4 print message2.name
同3
5 message1.say
我们现在发送了信息给对象"message1",这个信息就是"say". 然后,你告诉"message1" 执行"say”的功能; 再然后,"message1"在它的类"Say_Something"寻找定义过的命令.就这样,目标对象就返回到了class类中定义过的动作,也就是在屏幕中显示.
6 message2.say
同5

完整地看下事件页这几行脚本:
message1=Say_Something.new("Hello", "Alex")
message2=Say_Something.new("Hello", "Peter")
print message1.name
print message2.name  
message1.say
message2.say

好了,今天的教学就到这了,好好回顾一下前三讲的东西,主要是理论部分较多,需要好好理解~接下来我们就主要学习如何编码了,基础要掌握好才能建好高楼哦~~
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

查无此人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2006-5-8
帖子
1399
9
 楼主| 发表于 2006-7-24 23:03:18 | 只看该作者
说明一下,刚找到了十七讲后的内容,终于可以往下学了,可惜的是还是不完整的…………{/gg}{/gg}

另外,CMS教学打算取消掉,满世界追着那个作者跑也追不到下文了{/gg}{/gg}
KRKR + NS 学习中..........
回复 支持 反对

使用道具 举报

Lv1.梦旅人

堕落天使

梦石
0
星屑
55
在线时间
73 小时
注册时间
2005-10-22
帖子
337
10
发表于 2006-7-24 23:27:17 | 只看该作者
加精,快发~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 20:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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