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

Project1

 找回密码
 注册会员
搜索
楼主: harinlen
打印 上一主题 下一主题

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

  [复制链接]

Lv3.寻梦者

梦石
0
星屑
1253
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
71
 楼主| 发表于 2012-11-9 17:17:42 | 只看该作者
satgo1546 发表于 2012-11-8 18:54
6R终于在一番之后恢复了……于是乎教程时间到~

场景类
这一节之前的声明在学习这一节之前,请 ...

这……怎么上来就是场景了啊……模块什么的都还没说DA☆ZE?
要不先把module和基本画法普及了再说?实在不行先把API的调用普及了吧……

点评

要不……先把module讲了然后在目录里排序如何。  发表于 2012-11-10 11:18
翻了一番后发现铅笔只写了类没写模块……下次讲到Graphics.update什么的再说吧><  发表于 2012-11-9 18:43
我记得铅笔已经把类和模块吃了的说……不信可以看目录嘛。  发表于 2012-11-9 18:29


回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
72
发表于 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 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1175
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

73
发表于 2012-11-16 09:12:53 | 只看该作者
  看到这个帖子,我们欣慰,似乎是大家又兴致勃勃的开始写“RGSS3”教程了。然而,我却又感到困惑:对于RGSS、RGSS2的教程,先贤(或者说先贤们)早有尝试,而鲜获成功,为何?@IamI君的一席话倒是道出了真相:
写 RGSS 教程的实则实在讲 Ruby ,讲 Ruby 的却又大多照搬F1。

  没有看清这个事实的人,也变就一遍一遍的重复先贤们干过的事。事倍功半。对于这个问题,我思考了很久,想到了下诸几个事:
  • 编写一个脚本到底需要对 Ruby 有多么了解?
  • 对 Ruby 足够了解就能够写出一个脚本了么?
  • 编写脚本有必要修习软件开发的原则么?

  当然,想要编写脚本,你就需要对 Ruby 至少有 90% 的了解,也就是说,对 Ruby 的用法、概念(尤其是 OO )要有相当的熟练度。然而,就算你对 Ruby 达到了 100% 的熟练,也未必能够写出脚本,因为你缺乏对 RGSS 系统的理解。举个例子,请看这段代码:

RUBY 代码复制
  1. $scene = Scene_Map.new


  若是有一点 Ruby 知识的人,就会很容易明白这句话的意思:无非是实例化一个 Scene_Map 对象,并用 $scene 来接收而已。对,的确是这样,然而,这样做又有何意义呢?如果你不从 RGSS 的角度去分析,他就始终是个简单的实例化、赋值。任何一个有RGSS、RGSS2脚本编写经历的人都会知道,这个是将场景转换到地图界面的语句。

  然而对于第三个问题,我则不置褒贬。RGSS 系统现在有三个版本,很多人尝试着让脚本在三个系统间兼容,以及与其他作者编写的脚本兼容,这些都是工程上的问题。我们确实需要引入一些方法来解决这些问题。然而,如果我们在这方面过于苛求,则会让软件开发原则中哪些繁文缛节把问题更加复杂化。因此,我们为 RGSS 教程中应该合理的、适度的介绍在编写脚本的时候在工程方面应该注意的问题。这个也是先贤们没有做到的。

  说了这么多,实际上是为了引出我现在做的工作,12年(也就是今年)的早些时候,我发表了 RGSS3 小探系列报告(真正意义上的发表只有一篇),通过报告,我发现 RGSS3 与 RGSS2 以及 RGSS1 有着很大程度上的不同,给新手造成的疑惑也更多。因此,本着“授人以鱼不如授人以渔”的精神,我以报告为基础,着手撰写了《深入理解RGSS——RGSS3导引》。

  


  这个文集,从三个方面入手:剖析、实战、工程。先从分析 RGSS3 的结构,从原理层面上去阐述 RGSS3 的工作原理(例如,对话框是如何实现的,这对自己编写脚本很有意义),来使读者了解到怎么使用 RGSS3 。实战部分则关注如何去编写脚本,从实际出发,去考虑问题。最后工程方面则是介绍兼容、移植等内容。

  这个文集由于我个人的原因现在处于坑化状态中,我也不太确定最后是否能够填上。然而,我希望我写这个文集的思路能给诸位启发,合理的、高效的组织好教程,为社区干点真正的、有意义的事。

  而不是像拓路的先贤那样——永动无功。

点评

喵呜~谢谢DK大人了撒~(那本书私电子版还没看几节DA☆ZE……嘛,不可能写那么厚超越很容易~←疯了= =)  发表于 2012-11-19 21:35
@harinlen 确实是受那本书启发而来。当然,不会像也不可能像那本书那样写那么厚。  发表于 2012-11-18 17:50
其实……其实……我真的很不喜欢楷体的!=w= | 要知道F1是多好的东西……活动不如改成“VA的F1大家一起抄”算了……  发表于 2012-11-18 14:04
这本书的书名……是从深入理解Linux内核(Understanding the Linux kernel)来的么?  发表于 2012-11-18 12:07
主要是有些概念性的东西需要给出一个准确的、大家都认可的定义,现在这个教程坑就坑在这个地方。而且制图也是个大问题。  发表于 2012-11-16 10:54

评分

参与人数 4星屑 +569 梦石 +4 收起 理由
Vortur + 45 前辈,您倒是更新啊,要不众筹也行啊.
satgo1546 + 40 评分最大值
harinlen + 84 严重同意DAZE
Mic_洛洛 + 400 + 4 精品文章!

查看全部评分


See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1253
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
74
 楼主| 发表于 2012-11-18 12:04:41 | 只看该作者
DeathKing 发表于 2012-11-16 09:12
  看到这个帖子,我们欣慰,似乎是大家又兴致勃勃的开始写“RGSS3”教程了。然而,我却又感到困惑:对于R ...

严重同意DK神触观点……
本来当初写这个教程是打算用通俗易懂甚至吐槽一样的语言把RGSS3的教程写完……但是,准备面临FIRST IMPACT(EVA语,指High考= =)的私心有余而力不足啊……确实不想翻炒F1,但是……唉……

私想说的话……也就是DK触最后红字的部分了……私回来后会效犬喵之劳DA☆ZE~!

------某偷偷起来改改墓志铭的H酱

点评

高考非常重要,的确要好好准备,但也别看得太重(经验之谈),该玩的时候还是得玩。 @satgo1546 F1虽好,但也只是一本Reference Book,有时还是不堪用。  发表于 2012-11-18 17:53
怎么我看完的感觉是“要知道F1是多好的东西……活动不如改成‘VA的F1大家一起抄’算了”……?  发表于 2012-11-18 14:05


回复 支持 反对

使用道具 举报

Lv1.梦旅人

WG后援团
此人已死 有事烧纸

梦石
0
星屑
69
在线时间
12 小时
注册时间
2008-1-12
帖子
1829

贵宾

75
发表于 2013-1-18 00:33:12 | 只看该作者
常量和变量2

    吐槽:很久没回来,都出了RPG VX A了。虽然我电脑上的ruby已经更新到1.9.2了,花了一两分钟看了下教程,发现变量解释还有不足,我给补充上。
RUBY 代码复制
  1. crr =[1,a,s_13,%$#,54687]
  2. p crr.2


    看看以上的代码,定义一个数组 crr 并且我向其中存入数组数据。这个地方有点涉及到定义的类型,我这里存入了数字,英文,字符串等类型(当然,ruby中是不需要定义数据类型的,随意存储)。
    crr 是我定义的一个变量,在ruby中变量可以存储不同类型的数据,所以在RGSS中与一般编程语言不同的是,变量可以任意更换各种数据类型而不需要重新来个 integer
    又比如

RUBY 代码复制
  1. if (/^HTTP\//i =~ d) != nil  
  2.       $statu = d.split(" ")[1]   
  3.       if not /^(200)$/ =~ $statu  
  4.         puts "download file Err, statu #{$statu}"  
  5.         downing.kill   
  6.         exit   
  7.       end

    这是我书写的一个ruby下载MP3小程序里的一行代码。这里变量$statu被我引入了一个返回值,注意$statu = d.split(" ")[1] 这里 "="号后面的返回结果是一个数值,不是某个函数方法。在ruby中变量后面跟到某个函数过程,这个变量必定是被赋值一个返回结果,即使这个结果是个nil(为空)


    这里再补充一点小东西吧~在ruby中,print “” 和print ‘’是有区别的,MSGBOX之类的大致上也类似。
RUBY 代码复制
  1. @a1 = "abc"
  2.  
  3. p "ABC@a1"# => "ABCabc"
  4. p 'ABC@a1' #=>"ABC@a1"


如果在你P的内容中包含一个变量,那么在" "号中,P的结果会返回你的变量的数值,而' '号则返回p的具体的字符内容。

点评

亲喝醉了就不要用脸去滚键盘……  发表于 2013-2-15 11:57

评分

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

查看全部评分

郑重声明:
1.本人是文盲,以上内容文字均不认识,也看不懂是什么意思。
2.此事与本人一点关系都没有,只是本着“看贴(虽然看不懂)回贴,利人利己的中华民族优秀传统美德”,顺便赚1个RP。
3. 本人在此留言均为网络上复制,并不代表本人同意、支持或者反对楼主观点。  
4. 如本人留言违反国家有关法律,请网络管理员及时删除本人跟贴。  
5. 因删贴不及时所产生的任何法律(包括宪法,民法,刑法,书法,公检法,基本法,劳动法,婚姻法,输入法,没办法,国际法,今日说法,吸星大-法,与台湾关系法及文中涉及或可能涉及以及未涉及之法,各地治安管理条例)纠纷或责任本人概不负责。
6. 本人谢绝任何跨省追捕行为,如有需要请直接联系楼主、原作者以及网络管理员或法人代表。  
7. 此声明最终解释权归本人所有。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8028
在线时间
720 小时
注册时间
2013-1-16
帖子
80

开拓者

76
发表于 2013-1-18 17:48:08 | 只看该作者
先来观察一下..
不过主要都是不懂脚本的问题

点评

还好……不过话说脚本这种东西=3=嘛,建议去看看紫妈(←还想活麼)的RGSS2教程啊。那个写的确实不错的说。  发表于 2013-1-27 17:21

评分

参与人数 1星屑 +45 收起 理由
harinlen + 45 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
77
发表于 2013-2-13 16:06:50 | 只看该作者
请楼主不要介么无聊了……

点评

说的是hello world的  发表于 2013-2-13 16:10
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
78
发表于 2013-2-13 18:08:45 | 只看该作者
candy2266 发表于 2012-10-18 12:19
实例变量

class Tests
  @@a=0
  def initialize
    @@a=@@a+1
  end
  
  def geta
    @@a
  end
  
end

pa = Tests.new
msgbox pa.geta

pb = Tests.new
msgbox pa.geta
msgbox pb.geta


结果: 1 2 2
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
79
发表于 2013-2-13 18:39:22 | 只看该作者
本帖最后由 zhangchi5 于 2013-2-13 18:40 编辑

RGSS3: class Window

RGSS中有一个叫Window的类,主要用于创建窗口。
这一节我们将分别讨论各种窗口
Window: The Simple Window
基本的窗口就是一个没有任何东西的窗口。建议不要使用RGSS内置类Window,而用Window_Base
【创建方法】
Variable = Window_Base. new (x, y, w, h)
你将可以在x,y位置创建一个长宽为w,h的窗口
Sample

RUBY 代码复制
  1. class Scene_Test < Scene_Base
  2.   def post_start
  3.     super
  4.     @newwindow = Window_Base.new(0,0,Graphics.width,Graphics.height)
  5.   end
  6.   def update
  7.     super
  8.     @newwindow.update #可以用update_all_window替换
  9.   end
  10.   def pre_terminate
  11.     super
  12.     @newwindow.dispose
  13.   end  
  14. end


Picture:






点评

其实,在写的时候就应该直接用Scene_Title做窗口,而不是,在学习中的问,应该怎么样调用,然后在说,替换掉某段初始窗口= =个人感觉  发表于 2013-7-1 17:09
怎么没@到……(话说不会有人叫“到”吧……)  发表于 2013-3-8 17:16
@神秘来客3 请注意一下- -如果你要运行,在SceneManager中把第一个场景换掉!!应该有一个“Scene_Title”替换成"Scene_Test"  发表于 2013-2-22 16:52
就是不运行啊咋回事 也不报错  发表于 2013-2-20 18:00

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
41 小时
注册时间
2010-7-10
帖子
111
80
发表于 2013-2-13 20:03:30 | 只看该作者
Window: The Simple Window with Animation(带动画的窗口)
窗口是可以有动画的。不过在这之前还要介绍一下Window_Base类以及Window类的一些方法与属性
【方法】
dispose     释放
open       打开动画
close       关闭动画
show       显示窗口
hide        隐藏窗口
activate       启用窗口
deactivate     冻结窗口
【属性】
openness     开启度
opacity        透明度
x, y, width,height     在此不解释了
z                  窗口深度。Z大则窗口在上面
【提示】部分Window类里的属性并没有给出我认为那是不重要的详细可以参阅RMVX/ACE帮助文档
【动画效果】
窗口打开(window.open)与关闭(window.close) 【之前预处理window.openness=0
窗口淡入(window.opacity= window.opacity+16)淡出(window.opacity= window.opacity-16)【之前预处理window.opacity=0
窗口色调改变:全黑到亮(window.tone=Tone.new(0,0,0,window.tone.gray+16))全亮到黑(window.tone=Tone.new(0,0,0,window.tone.gray-16))【之前预处理window.tone=Tone.new】【使用这个是要先执行update函数的super
窗口飞进来【window.x=window.x+1】【预处理window.x=-window.width

Sample
这里注意一点,我在上一个帖子里没有注意的问题:
任何元件的创建都在start函数里,释放都在terminate函数里。

RUBY 代码复制
  1. class Scene_Test < Scene_Base
  2.   def start
  3.     super
  4.     @newwindow = Window_Base.new(0,0,Graphics.width,Graphics.height)
  5.     @newwindow.openness=0
  6.   end
  7.   def post_start
  8.     super
  9.     @newwindow.open
  10.   end
  11.   def update
  12.     super
  13.     @newwindow.update #可以用update_all_window替换
  14.   end
  15.   def per_terminate
  16.     @newwindow.close
  17.     super
  18.   end
  19.  
  20.   def terminate
  21.     @newwindow.dispose
  22.     super
  23.   end  
  24. end




Picture:





点评

脚本第1行:uninitialized constant Object::Scene_Base  发表于 2013-4-13 18:27
不执行  发表于 2013-2-16 16:32

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 17:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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