Project1
标题:
新手教程——函数外的常量(理论篇)_(3)
[打印本页]
作者:
一箭烂YiJL
时间:
2010-12-11 09:53
标题:
新手教程——函数外的常量(理论篇)_(3)
本帖最后由 一箭烂YiJL 于 2010-12-11 12:52 编辑
课序号:3
作者:一箭烂YiJL
出版社:VX教程出版社
售价:免费
VX教程出版社的其它教程
上一课:
新手教程——计算累计时间Window
注:适用于class类
这次我要说的是如何在函数外设定常量。
序:
要在
函数外
设定常量(能在函数内调用),好处在于方便修改,下边是个简单规模:
class Scene_Model < Scene_Base # 其实不一定是Scene,适用于class类
X = 1 # X坐标
Y = 2 # Y坐标
WIDTH = 90 # 宽度
HEIGHT = 160 # 高度
TILENAME = "模拟标题" # 标题
def terminate
...... # 这里不成立的
end
def start
...... # 这里不成立的
end
def update
...... # 这里不成立的
end
end
复制代码
可能大家也看过一些实用脚本有着类似这样的东西,
这样既方便修改,又能让实用的脚本新手用得更称心。
认真的说:在类中存放常量是为了提高程序的可移植性,
就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。
Q:为什么函数外的变量是大楷?
A:
字头大楷
即可。
Q:这些变量必须是在同一各类里才能使用吗?
A:刚才说的方法是必须的。
Q:有方法能让参数不再同一个类?
A:方法是有的,待会儿会说。
正式开始:
A.类内常量
简单式:
class Model
X = 1
def
@window_command.x = X # =>1
end
end
复制代码
数组式:
class Model
# X Y 坐标
XY = [2, 4]
def
@window_command.x = XY[0] # =>2
@window_command.y = XY[1] # =>4
#XY[0]是指XY数组内的第一个参数,数组是从0开始数起的
end
end
复制代码
哈希式:
class Model
# X坐标 Y坐标
XY = {:x => 5, :y => 0}
def
@window_command.x = XY[:x] # =>5
@window_command.y = XY[:y] # =>0
end
end
复制代码
注意:要记得数组式和哈希式中间有个","逗号。
B.module 模块类
这一种方法亦被利用于Vocab。(不知道有Vocab这脚本页的不要理会)
不过这种方法比较复杂,所以供于脚本基础较高的同学学习研究。
注意:这必须插在类之外的。
他是除了class类外的另外一种类。
建立方法:
module Model
X = 1
end
复制代码
调用方法(有两种方法):
一、用下述方法让Model里的所有变量变成这个类的常量。
在类中加进这句:
include Model # 把所有Model里所有的常量拿进来
复制代码
这种方法虽然方便,但有常量相同时则很麻烦。
二、调用当中的一两个变量:
X = Model::X # Model的X代进这里的X
复制代码
以下是个简单例范
:
module Model
X = 1
Y = 2
WeightLength = {:W =>3, :L => 4}
end
class Text < Scene_Base
X = Model::X
Y = Model::Y
W = Model::WeightLength[:L]
L = Model::WeightLength[:W]
# 现在X是1,Y是2,W是3,L是4
p X + Y + W + L # =>10(加出来的)
end
复制代码
当你再用:
$scene = Text.new
的时候,有个窗口会显示10,因为是有XYWL四个常量加起来的。
总结,我们学到了:
1.使用类外的常量
2.module模块类
3.调用module里的常量
4.数组(Array)
5.哈希(Hash)
看完教程请回复,
我们需要的是支持!!
好了,这堂理论课上完了,谢谢大家。
下一课:
新手教程——函数外的常量(实战篇)
作者:
企鹅达达
时间:
2010-12-11 12:17
看完,很好
作者:
DeathKing
时间:
2010-12-11 12:39
本帖最后由 DeathKing 于 2010-12-11 12:39 编辑
我来纠正一个小错误:与其说是“变量”,不如更准确的说是“常量”。
想一想,所有的常量标识符都是以大写字母开头的(类的名称就是常量标识符)。计算机科学中,常量是在某一阶段保持不变的量,但Ruby的动态性使得常量也可以随时改变。
刚好之前解答了一个关于“解析域”的问题:
http://rpg.blue/thread-162792-1-1.html
[line]1[/line]
在类中存放常量是为了提高程序的可移植性,就像VX中的Window_Base::WLH一样,避免类每个类的行号不一致而带来的麻烦。
作者:
禾西
时间:
2010-12-11 12:49
雖然ruby中常量和變量的區別很模糊,但是這樣預定義的確是是常量。因為在程序運行中,他們的確不會改變
作者:
summer92
时间:
2010-12-12 15:52
学习一下model,用这个应该能更好管理脚本?
summer92于2010-12-13 10:02补充以下内容:
是啊,模块,下次讲讲把.....
作者:
mummyx
时间:
2011-2-9 10:38
提示:
作者被禁止或删除 内容自动屏蔽
作者:
一箭烂YiJL
时间:
2011-2-9 10:43
回复
mummyx
的帖子
笔误:W变了L,L变了W,谢提醒。
(不过我也懒得修改了,喂喂!6楼补充啊,六楼补充。)
作者:
mummyx
时间:
2011-2-9 10:47
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1