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

Project1

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

[RMVA发布] RGSS3 脚本入门(全文翻译)

[复制链接]

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

跳转到指定楼层
1
发表于 2013-12-21 21:14:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 喵呜喵5 于 2014-2-4 14:00 编辑

在K岛看到完整版的翻译了,所以我自己接下去的翻译就弃坑了啦啦啦
https://googledrive.com/host/0B2GGQwUSXTWfVVNMd05iVlB5Nkk/
(可能需要翻墙)

======================================
↓个人已翻译部分留档
==========================================
  • 前言

以下的内容翻译自RPG制作大师VX Ace的官方帮助文档中的スクリプト入門-実践編,共包含以下内容:
タイマーの改造
あらすじ画面の作成
脱出アイテムの作成
アイテム消費スキルの作成
景品交換所の作成
テレポートアイテムの作成
タイトル画面の改造

如同标题所说,这是一个RGSS脚本教程,而不是Ruby编程语言教程,并且已经是实践篇了,所以我不负责普及Ruby语言的知识。如果你是一个完全没有编程基础的人,建议你先去学习一下Ruby语言或者C语言或者至少去看看RMVX的中文帮助文档中的基础篇和解读篇(传送门:http://pan.baidu.com/s/1OIwk)。
(另外再说一句,别觉得自己初中高中义务教育课上学的那些东西叫编程基础……幼儿园你就会加减乘除了你想想你自己现在数学学成个什么样= =,义务教育课上学习的那些内容最多只是一点皮毛罢了。)
整个翻译工程的进度和完成度需要看我的心情,请不要催稿……
你可以转载这篇文章,但请不要抹去这篇文章的地址(http://rpg.blue/forum.php?mod=viewthread&tid=343091)。
(↑ 当然,也不要抹去上面这句话。)
如果任何翻译的错误或者编程上的错误可以直接在留言中告诉我。如果对我的翻译有哪句无法理解或者看不懂也可以直接告诉我。
那么以下便是正文。

  • 改造计时器

实践篇目的是说明如何用脚本实际对游戏进行改造。
首先从事件指令中『计时器操作』的计时器显示方式开始。


  • 制作计时器事件

最开始先关掉脚本编辑器,在地图上新建一个计时器事件用来测试。
如图中这样,设置成自动执行,这样一打开游戏就可以对改造后的效果进行确认。

  • 开始写脚本

之前基础篇部分让你测试的那些脚本已经不会使用了,请删掉他们,在脚本编辑器「▼ 素材」的下方插入一个新的脚本,起一个合适的名字。
虽然也可以在原脚本部分直接编辑,不过把所有对原脚本的改变全部都合在一起从各方面来说都更加方便一点。因此,即使你不打算把这个脚本作为素材公开发布也建议你在「▼ 素材」下方插入新脚本。

  • 寻找修改的位置

开始写脚本前的第一件事便是找到为了实现自己的目标而需要进行修改的地方。
这次要改造的是计时器,所以全局搜索一下『计时器(タイマー)』吧,注意不要勾选『仅全词匹配』。搜索出来的结果总共有哪几条?依次看下去,寻找和计时器有关的部分。
这次要改的计时器就是『Sprite_Timer』这个脚本。脚本的介绍在脚本开头也有。改造特定的功能就是如此的简单,掌握诀窍的话很快就能找到需要修改的脚本位置。

  • 重新定义类和模块

在新创建的这个脚本中,输入:
  1. class Sprite_Timer
  2. end
复制代码
在Ruby编程语言中,已经定义过的东西可以通过再次定义来变更。因此,在我们写在class Sprite_Timer和end中间的内容也可以看成是对原来那个class Sprite_Timer的修改。
阅读原本的Sprite_Timer脚本应该可以找到一个名为create_bitmap的方法,这个方法设定了计时器的文字颜色及大小,这次我们要改造的就是这里,复制create_bitmap这个方法,粘贴到我们新建的这个脚本中。脚本变成了现在这样:
  1. class Sprite_Timer
  2.   def create_bitmap
  3.     self.bitmap = Bitmap.new(96, 48)
  4.     self.bitmap.font.size = 32
  5.     self.bitmap.font.color.set(255, 255, 255)
  6.   end
  7. end
复制代码
新的脚本和旧的脚本中都出现了名为create_bitmap的这个方法(def create_bitmap),在Ruby语言中,同一个类(class Sprite_Timer)中出现两个名字相同的方法(def create_bitmap)时是只会识别放在最下方的那个脚本中的方法的(即,只认我们新写的这个脚本中的def create_bitmap),所以,我们可以用这个脚本中的create_bitmap替换掉原本的create_bitmap。这便是脚本的实质(同时也是脚本冲突的实质嗯= =)。

  • 变更方法的定义

把刚才的create_bitmap这个方法实际的来修改一下吧。
  1. class Sprite_Timer
  2.   def create_bitmap
  3.     self.bitmap = Bitmap.new(128, 96)
  4.     self.bitmap.font.size = 64
  5.     self.bitmap.font.color.set(255, 0, 0)
  6.   end
  7. end
复制代码
按照上面的数字进行修改后,计时器显示的文字成功放大并且变成红色的了。
对于这里的这些数字的意义还不甚了解的人可以把数字自己改一改来实验一下,如果想要详细确定其意义的话可以参考Bitmap、Font、Color这三个类。


  • 别名

通过上面的步骤我们已经完成了一个『计时器显示文字放大变红』的脚本素材,然而,如果要把这个脚本给其他人使用时由于我们覆盖了原本的create_bitmap,所以脚本与其他脚本可能存在冲突,如果你要做的不是完全修改掉某个方法而只是在已有的方法后面添加什么内容的话,可以使用alias(别名)这个功能。
  1. class Sprite_Timer
  2.   alias xxx001_create_bitmap create_bitmap
  3.   def create_bitmap
  4.     xxx001_create_bitmap
  5.     self.bitmap.font.color.set(255, 0, 0)
  6.   end
  7. end
复制代码
上面这种写法可以在执行原本的create_bitmap的基础上把文字的色彩改成红色
  1. alias xxx001_create_bitmap create_bitmap
复制代码
这一行的作用是给原来的create_bitmap起一个xxx001_create_bitmap的别名,让原本的create_bitmap躲进xxx001_create_bitmap避难以免遭到覆盖。这样一来,在新的create_bitmap中就可以用xxx001_create_bitmap来调用原先的create_bitmap。但是,别名相同的情况也是有可能发生的,为了使别名不与其他脚本素材发生冲突,独特的别名是很有必要的。即使是同一个脚本在相同的地方定义了同样的别名同样会发生冲突。
稍微容易给人造成混乱的地方是,重新定义create_bitmap并不是在原来的方法里写新的内容,而是创造了一个看起来好像是这样的新方法,因此,躲进别名里面避难的旧方法是不会受到重新定义的新方法带来的影响的。

评分

参与人数 1星屑 +666 收起 理由
Sion + 666 先给你点稿费吧

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
103 小时
注册时间
2013-12-12
帖子
200
11
发表于 2014-2-5 09:56:31 | 只看该作者
用的半英半中的帮助文件,没有这一部分内容。
去官方网站下了最新国际版,里头居然也没有这一部分内容 。 这一部分是日文版独有的?{:2_251:}

点评

是的,论坛下载的日文破解版包含日文原版的帮助文件,里面就有这块内容  发表于 2014-2-5 11:31
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

10
 楼主| 发表于 2014-2-4 14:01:31 | 只看该作者
在K島看到了完整的全文翻譯,所以之後這個帖子就不會更新了
棄坑前最後一次自頂
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

9
发表于 2014-1-9 23:16:21 | 只看该作者
你这个字太多了啊,看到都怕了

点评

基本上是原样按照帮助文档翻译的......  发表于 2014-1-10 07:19
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

8
 楼主| 发表于 2013-12-28 22:31:23 | 只看该作者
本帖最后由 喵呜喵5 于 2014-2-4 13:59 编辑

弃坑,之前占的楼作废

{:2_260:}
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

7
 楼主| 发表于 2013-12-28 13:45:50 | 只看该作者
本帖最后由 喵呜喵5 于 2014-2-4 13:58 编辑

已弃坑
{:2_260:}
此帖作废
回复 支持 反对

使用道具 举报

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

6
发表于 2013-12-26 09:33:52 | 只看该作者
我会说我已经拿到了RMVA帮助的汉化版?

点评

......没后文了?  发表于 2014-1-5 17:37
我说的那个脚本部分有汉化,并且完全删掉了原版中的这块脚本教程  发表于 2013-12-26 10:17
http://pan.baidu.com/share/link?shareid=540395&uk=2181038425  发表于 2013-12-26 10:10
希望不是那个开头软件使用部分还是英文这块内容整个被删除了的阉割汉化版就好  发表于 2013-12-26 10:09
那就把这部分发上来啊?  发表于 2013-12-26 10:01
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3278
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
5
发表于 2013-12-23 11:26:40 | 只看该作者
什么时候填坑?

点评

看我的心情......一周一节吧  发表于 2013-12-23 17:58
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

4
 楼主| 发表于 2013-12-21 21:16:35 | 只看该作者
本帖最后由 喵呜喵5 于 2014-2-4 13:57 编辑

弃坑
{:2_260:}

点评

肯定会发的,在百度网盘找到的  发表于 2013-12-26 10:05
不必要这样连帖,最好在主楼弄一个目录,分别链接到各楼形成一个系列。  发表于 2013-12-21 21:33
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21427
在线时间
9386 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

3
 楼主| 发表于 2013-12-21 21:15:35 | 只看该作者
本帖最后由 喵呜喵5 于 2014-2-2 20:25 编辑

  • 制作瞬移道具

下面开始讲解菜单界面里物品以及技能的处理。
作为例子,这里向大家介绍如何制作在迷宫中快速移动到入口的瞬移道具。

  • 创建物品数据
在开始写脚本前,请先打开数据库设定一下瞬移道具的数据。
在适当的位置新建一个道具。
作用范围选择“无”,使用条件选择“仅菜单中”,在备注中填入<ESCAPE>(包含“<>”这个符号) 。
创建一个拥有特殊效果的技能/道具的时候,利用备注会比较方便,之后只需要判定备注栏里是否有制定的内容就好,比起判定道具/技能的名字、ID,使用备注可以提升脚本的通用性。在这个例子中我们通过判定备注栏里是否含有<ESCAPE>来判定是否属于瞬移道具/技能。
数据设置完毕后,使用事件指令『增减物品』制作一个能够快速获得该道具的工程用于测试,准备工作便完成了。
  • 物品使用部分的处理
在菜单中处理技能和道具的是Scene_ItemBase里的use_item方法 (虽然名字叫item,这个方法也负责处理技能)。最开始就从这里入手,重新对其进行定义。
  1. class Scene_ItemBase
  2.   alias xxx001_use_item use_item
  3.   def use_item
  4.     xxx001_use_item
  5.     use_escape_item if item.note.include?("<ESCAPE>")
  6.   end
  7.   def use_escape_item
  8.     print "瞬移!\n"
  9.   end
  10. end
复制代码
上面这段脚本实现了如果备注栏里有<ESCAPE>则执行use_escape_item方法的功能。
  1. use_escape_item if item.note.include?("<ESCAPE>")
复制代码
在这句代码中,item代表使用的道具,也就是是RPG::Item或者RPG::Skill的一个实例方法(这句不太确定,附上原文:item というのは、使用されたアイテムのオブジェクト、つまり RPG::Item や RPG::Skill のインスタンスを返すメソッドです (これは Scene_ItemBase クラスではなく、継承先の Scene_Item および Scene_Skill クラスで定義されています) 。)
note代表数据库中的备注,是一个字符串,字符串的include?方法用于判定其是否包含特定的文字。
use_escape_item这个方法执行的内容目前就暂时用在控制台显示“瞬移”两个字来代替。
  1.   def use_escape_item
  2.     print "瞬移!\n"
  3.   end
复制代码
实际测试的时候也先像这样试试能不能正常执行use_escape_item再继续下一步吧。
  • 切换场景
为了让瞬移道具使用后能自动返回地图界面,这里需要在use_escape_item里增加一句返回地图的代码。除了用之前介绍过的call方法外,因为之后没有必要再返回这个界面了所以也可以使用goto方法
  1.   def use_escape_item
  2.     SceneManager.goto(Scene_Map)
  3.   end
复制代码
Scene_Map正如其名字一样,对应地图场景,这句代码调用了SceneManager模块中的goto方法来让物品使用时自动返回地图界面。
  • 场所移动
游戏角色对应的Game_Player类中已经预定义了场所移动的方法reserve_transfer。
  1.   def use_escape_item
  2.     $game_player.reserve_transfer(1, 10, 8)
  3.     SceneManager.goto(Scene_Map)
  4.   end
复制代码
reserve_transfer对应的三个参数分别是地图ID、X坐标、Y坐标,例如在这个例子中执行这个语句后玩家将移动到ID为1的地图上坐标为(10,8)的地方。这里先随意写几个数确定一下是否能正常移动过去吧。
确认能够正常移动后,下面要使用游戏变量来设定场所移动的位置了。
  1.   def use_escape_item
  2.     m = $game_variables[21]
  3.     x = $game_variables[22]
  4.     y = $game_variables[23]
  5.     $game_player.reserve_transfer(m, x, y)
  6.     SceneManager.goto(Scene_Map)
  7.   end
复制代码
例子中使用21~23号变量确定移动的位置,当然,使用其他变量也是可以的。
  • 禁止瞬移道具的使用
在很多情况下,例如当玩家不在迷宫中时,我们希望禁止玩家使用瞬移道具。为了满足这些要求,接下去我们设定当之前用来储存地图ID的21号变量值为0的时候禁止选择瞬移道具。
  1. class Game_BattlerBase
  2.   alias xxx001_usable_item_conditions_met? usable_item_conditions_met?
  3.   def usable_item_conditions_met?(item)
  4.     if item.note.include?("<ESCAPE>") && $game_variables[21] == 0
  5.       false
  6.     else
  7.       xxx001_usable_item_conditions_met?(item)
  8.     end
  9.   end
  10. end
复制代码
用来判定物品/技能是否可以使用的语句在Game_BattlerBase里,这里对usable_item_conditions_met?这个方法进行重新定义。如同注释中所写的,这个方法用来判定某个技能/道具的使用方法,返回true代表可以使用,返回false代表不能使用。
如果想要知道使用条件具体是怎么判定的话,请尝试解读usable?方法吧。

点评

我看过,汉化了脚本部分  发表于 2013-12-26 10:15
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-21 03:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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