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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: harinlen
打印 上一主题 下一主题

[版务] 【活动】【VA】RGSS 3 入门教程大家写(更新13/02/15)

  [复制链接]

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
11
发表于 2012-10-26 19:27:57 | 显示全部楼层
嗯……函数表示被某铅笔吃了。。对象貌似也被吃了。。数组吃了,哈希表——{:2_270:}找到一个很好的东西可以讲……
表示上面用兔子是特例,我一般还是用猫的

哈希表
「对数组的扩充」
其实哈希表本来就是变异的数组(当然不涉及DNA之类的)……
之前说过,数组的调用方式是a[x],其中a是数组名,x是下标(0~数组元素个数-1)。而哈希表的调用方式就是hash[key],其中hash相当于刚才的a,key——在数组里面是数字,而在哈希表中可以是任何东西——前提是你先添加一个元素,下标是这个东西。
【例子】
  1. a = [66,77,88] # 论坛三宠物……好吧我多余了
  2. b = {"六六" => 66,"七七" => 77,"八八" => 88} # 论坛宠物的哈希表
  3. # 注意哈希表是大括号声明的
  4. msgbox a[0],a[1],a[2]
  5. msgbox b["六六"],b["七七"],b["八八"]
  6. # 调用时都用中括号
复制代码
两次弹出的内容是一样的。
由此可见,当需要使数组元素的“名字”更为直观的时候,可以使用哈希表,除此之外哈希表与数组没有任何区别!
哈希表常用方法(确认方法已经被吃了)
在哈希表中可以用一些方法来判断某元素是否存在于哈希表中。
【例子】
  1. hash = {"one" => "!","two" => "@","three" => "#"}
  2. msgbox hash.include?("one") # => true
  3. msgbox hash.include?("four") # => false
复制代码
include?传递的参数是下标。不用解释了吧。一些注意点
哈希表是没有顺序的。

本节到此结束。(好短大概是因为数组讲过了

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励,内容要丰富一点就更好了~.

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
12
发表于 2012-11-8 18:54:23 | 显示全部楼层
6R终于在{:2_272:}一番之后恢复了……于是乎教程时间到~

场景类
这一节之前的声明在学习这一节之前,请先做下面两条动作中的一条:
  • 新建一个工程用来做RGSS3·场景类,和以后的RGSS3练习
  • 把原来的Main弄回来!

原因很简单,我们以后的例子不再弹窗,也不再寄居在Main里面啦!
场景是什么
我们先来看几张图片吧。(不要吐槽游戏之类的……我只是想说明这是场景)PS:由于论坛时不时抽,图看不到请刷新

↑菜单界面

↑物品界面

↑存档界面
各种界面(或者说,场景)组成了一个游戏,包括物品、技能、存档、菜单、地图、结束、标题、装备、状态……
而这就是今天要讲的:如何创建一个场景!
选择场景的理由
还记得那个HelloWorld吗?
不过你有没有注意到,在一个正经的游戏里面没有一个弹出窗口?
不使用弹窗的原因有很多:
  • 窗口只能显示一条信息(多行信息也算一条)
  • 不能询问是/否
  • 不能有很多选项
  • 没法退出(F12不算,这里说的是“正规”退出方法)
  • 半路上弹个窗会把人吓得半死……= =

这就是为什么要用到场景了。
建立自己的场景(1)
前面说过这个概念了。其实在RGSS3中,每个场景都是一个类。
不过这个类里的刷新画面之类的基础代码不需要你自己来写,RGSS3已经提供了最最基础的场景类代码,就藏在那呢——


场景的箭头下方,一大堆Scene开头的类就藏在那里呢。
不过我们这节课的目标不是修改而是自己建立一个新的场景!
那么,建立在哪里呢?
建立自己的场景(2)
那么我们的场景建立在……插件脚本上!

PS:只是推荐建立在这里,不过要用Scene的话必须建立在Scene_Base脚本的下面。无特殊喜好的话推荐在插件脚本处。
然后给脚本页写一个名字,名字随便(只要能表达脚本页的主要内容即可),不推荐留空
接着就在右边写脚本了~
下面说明一下一般写(场景类)脚本的步骤:
  • 用注释写出这个脚本的主要用途,可参考默认脚本:
    1. #==============================================================================
    2. # ■ 场景名字
    3. #------------------------------------------------------------------------------
    4. #  描述内容
    5. #==============================================================================
    复制代码

  • 写上class,开工。
    1. class Scene_XXX < Scene_Base
    2. end
    复制代码

于是我们的脚本页就变这个样子了~
PS:某个特别好玩(方便快捷!强烈推荐使用)的快捷键叫F6……光标定位在第二行“场景名字”这里,F6一下……结果自己知道!
建立自己的场景(3)
这一次以一个简单的空白场景为例,演示如何建立场景。
步骤列表:
首先搭建场景框架。
  1. #==============================================================================
  2. # ■ 空白场景
  3. #------------------------------------------------------------------------------
  4. #  一个完全空白的场景。
  5. #==============================================================================

  6. class Scene_Blank < Scene_Base
  7. end
复制代码
由于这是空白场景,因此对这个Scene_Blank类什么也不用做,放在那里即可。
接下来是很重要的一步:将这个场景和其他场景连起来!
由于这个空白场景与什么场景都没有连接,因此我们需要将其与其他的场景连起来。这里以作为初始场景为例。
初始的一个场景不再像RGSS2一样需要有各种数据处理,我们只需……
  1. module SceneManager
  2.   #--------------------------------------------------------------------------
  3.   # ● 获取最初场景的所属类
  4.   #--------------------------------------------------------------------------
  5.   def self.first_scene_class
  6.     $BTEST ? Scene_Battle : Scene_Blank # 在此处修改
  7.   end
  8. end
复制代码
就行了!真的,就是如此简单!
于是我们的脚本页,应该是这样的:

好了,保存,执行。
怎么什么也没有?

对,就是什么都没有。我们并没有对Scene_Blank做任何改进,因此就是一抹黑。

这就是一堆代码导致的结果

下一节:为场景添色彩,敬请期待……

点评

从存档界面往下,我一张图也看不见了我刷新过,又隔了1星期看的 还是看不见  发表于 2013-4-15 16:17
除了两张图之外,全抽没了……  发表于 2013-2-14 09:06
可以吧……就这么定了ZE☆~  发表于 2012-11-10 22:14

评分

参与人数 2星屑 +90 梦石 +2 收起 理由
harinlen + 90 喵呜!目录是私自己更的喵~!Module要等到U.
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
13
发表于 2012-11-11 17:10:23 | 显示全部楼层
模块 # 72#,2336
PS:两个字的标题看着就爽
谜之“类”
我们在类 (#52)处说过:
我们看到va默认脚本中(除了Vocab之类的)都有class XXXX之类的。。。
于是Vocab之类的就是今天的重点啦><
现在我们把module什么的也当做一个特殊的“类”来处理,看看下面的例子吧。
【例子】 # 话说好久没用这个颜色了呐~
  1. module Sky
  2.   @clouds_size = 0
  3.   def self.add_one_cloud
  4.     @clouds_size += 1
  5.   end
  6.   def self.get_clouds_size
  7.     return @clouds_size
  8.   end
  9. end
  10. Sky.add_one_cloud
  11. msgbox Sky.get_clouds_size # => 1
复制代码
我们看到输出了1
类 (#52)的代码中有这么一句:
  1. luoluo = Person.new
复制代码
这里Person.new让Person这个类实例化了。
而此处的代码中的这一句:
  1. Sky.add_one_cloud
复制代码
却是直接调用Sky这个“类”。那是因为……
  1. module Sky
复制代码
看到了吗?这里是module而非class!于是就直接用Sky而不是Sky.new将Sky“类”实例化了。
module,就是今天要讲的模块
模块与类的异同 # 貌似我一点也没写过“同”……
  • 由于各种原因导致由于是模块,所以不用生成实例对象,也不能使用initialize方法。
  • 那么initialize初始化代码塞哪里呢?直接塞入module下面一行就行了!
  • 注意一下上面例子中的这三行:
    1. def self.add_one_cloud
    2.   @clouds_size += 1
    3. end
    复制代码
    这里用了def self.add_one_cloud来定义方法——self.是必须的,否则会导致各种奇怪的事情发生= =
  • 最后一点,类是class而模块是module。
某个题外话
其实最上面的例子的意思是……
  • 为天空加入一朵云;
  • 输出天空中共有几朵云。

由于各种原因发现居然没有讲模块……于是补完

点评

self. 在module里跟你上面的例子就是SKY.add_one_cloud。实际上模块的实例化直接在模块定义的时候就写好了,类的实例更多是应用的时候才实例  发表于 2013-1-18 00:46

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 17:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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