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

Project1

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

[RMVX发布] 新手教程——函数外的常量(理论篇)_(3)

[复制链接]

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4819
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2010-12-11 09:53:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 一箭烂YiJL 于 2010-12-11 12:52 编辑

课序号:3
作者:一箭烂YiJL
出版社:VX教程出版社
售价:免费
VX教程出版社的其它教程

上一课:
新手教程——计算累计时间Window

注:适用于class类
这次我要说的是如何在函数外设定常量。


序:
要在函数外设定常量(能在函数内调用),好处在于方便修改,下边是个简单规模:
  1. class Scene_Model < Scene_Base # 其实不一定是Scene,适用于class类
  2.   
  3.   X = 1                  # X坐标
  4.   Y = 2                  # Y坐标
  5.   WIDTH = 90             # 宽度
  6.   HEIGHT = 160           # 高度
  7.   TILENAME = "模拟标题"  # 标题
  8.   
  9.   def terminate
  10.     ...... # 这里不成立的
  11.   end
  12.   
  13.   def start
  14.     ...... # 这里不成立的
  15.   end
  16.   
  17.   def update
  18.     ...... # 这里不成立的
  19.   end
  20.   
  21. end
复制代码
可能大家也看过一些实用脚本有着类似这样的东西,
这样既方便修改,又能让实用的脚本新手用得更称心。
认真的说:在类中存放常量是为了提高程序的可移植性,
就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。



Q:为什么函数外的变量是大楷?
A:字头大楷即可。

Q:这些变量必须是在同一各类里才能使用吗?
A:刚才说的方法是必须的。

Q:有方法能让参数不再同一个类?
A:方法是有的,待会儿会说。


正式开始:

A.类内常量

简单式:
  1. class Model
  2.   X = 1
  3.   def
  4.     @window_command.x = X     # =>1
  5.   end
  6. end
复制代码
数组式:

  1. class Model
  2.   #     X  Y 坐标
  3.   XY = [2, 4]
  4.   def
  5.     @window_command.x = XY[0]     # =>2
  6.     @window_command.y = XY[1]     # =>4
  7.     #XY[0]是指XY数组内的第一个参数,数组是从0开始数起的
  8.   end
  9. end
复制代码
哈希式:

  1. class Model
  2.   #     X坐标     Y坐标
  3.   XY = {:x => 5, :y => 0}
  4.   def
  5.     @window_command.x = XY[:x]     # =>5
  6.     @window_command.y = XY[:y]     # =>0
  7.   end
  8. end
复制代码
注意:要记得数组式和哈希式中间有个","逗号。




B.module 模块类

这一种方法亦被利用于Vocab。(不知道有Vocab这脚本页的不要理会)
不过这种方法比较复杂,所以供于脚本基础较高的同学学习研究。
注意:这必须插在类之外的。
他是除了class类外的另外一种类。


建立方法:

  1. module Model
  2.   X = 1
  3. end
复制代码
调用方法(有两种方法):

一、用下述方法让Model里的所有变量变成这个类的常量。
在类中加进这句:

  1. include  Model  # 把所有Model里所有的常量拿进来
复制代码
这种方法虽然方便,但有常量相同时则很麻烦。


二、调用当中的一两个变量:

  1. X = Model::X   # Model的X代进这里的X
复制代码
以下是个简单例范

  1. module Model
  2.   X = 1
  3.   Y = 2
  4.   WeightLength = {:W =>3, :L => 4}
  5. end
  6. class Text < Scene_Base
  7.   X = Model::X
  8.   Y = Model::Y
  9.   W = Model::WeightLength[:L]
  10.   L = Model::WeightLength[:W]
  11.   # 现在X是1,Y是2,W是3,L是4
  12.   p X + Y + W + L   # =>10(加出来的)
  13. end
复制代码
当你再用:
$scene = Text.new
的时候,有个窗口会显示10,因为是有XYWL四个常量加起来的。


总结,我们学到了:
1.使用类外的常量
2.module模块类
3.调用module里的常量
4.数组(Array)
5.哈希(Hash)



看完教程请回复,
我们需要的是支持!!


好了,这堂理论课上完了,谢谢大家。

下一课:
新手教程——函数外的常量(实战篇)

评分

参与人数 1星屑 +3 收起 理由
Vortur + 3 精品文章

查看全部评分

Lv1.梦旅人

梦石
0
星屑
180
在线时间
829 小时
注册时间
2010-6-26
帖子
671
2
发表于 2010-12-11 12:17:38 | 只看该作者
看完,很好

点评

谢谢支持  发表于 2010-12-11 12:37
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

贵宾

3
发表于 2010-12-11 12:39:00 | 只看该作者
本帖最后由 DeathKing 于 2010-12-11 12:39 编辑

我来纠正一个小错误:与其说是“变量”,不如更准确的说是“常量”。

想一想,所有的常量标识符都是以大写字母开头的(类的名称就是常量标识符)。计算机科学中,常量是在某一阶段保持不变的量,但Ruby的动态性使得常量也可以随时改变。

刚好之前解答了一个关于“解析域”的问题:http://rpg.blue/thread-162792-1-1.html



在类中存放常量是为了提高程序的可移植性,就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。

点评

晚辈接纳前辈所言,立即改善。  发表于 2010-12-11 12:46

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

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

4
发表于 2010-12-11 12:49:16 | 只看该作者
雖然ruby中常量和變量的區別很模糊,但是這樣預定義的確是是常量。因為在程序運行中,他們的確不會改變

点评

可以改变无疑,只是会收到一个警告。  发表于 2010-12-11 13:59
谢前辈纠正!  发表于 2010-12-11 12:51
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1239
在线时间
668 小时
注册时间
2009-11-11
帖子
2787
5
发表于 2010-12-12 15:52:33 | 只看该作者
学习一下model,用这个应该能更好管理脚本?


summer92于2010-12-13 10:02补充以下内容:
是啊,模块,下次讲讲把.....

点评

Model只是模范的英文,作为module的例范,你的意思是module?  发表于 2010-12-12 17:16

嘿。嘿。嘿
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
10 小时
注册时间
2011-2-9
帖子
5
6
发表于 2011-2-9 10:38:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4819
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
7
 楼主| 发表于 2011-2-9 10:43:34 | 只看该作者
回复 mummyx 的帖子

笔误:W变了L,L变了W,谢提醒。
(不过我也懒得修改了,喂喂!6楼补充啊,六楼补充。)
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
10 小时
注册时间
2011-2-9
帖子
5
8
发表于 2011-2-9 10:47:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 01:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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