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

Project1

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

[RMVX发布] 新手教程——super的作用和外界调用类中函数_(8)

[复制链接]

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4869
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2011-1-8 15:28:45 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 一箭烂YiJL 于 2011-4-25 17:19 编辑

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

上一课:
新手教程——简单测试法x2_(7)


序:
xxxxxxxxxxxxxxx(过往话的屏蔽= =第二次的教程合集请勿将此写入)
废话少说,这次是说的是super的作用和外界调用类中函数


正式开始:
上几次说了super有传输参数的作用,其实这是不止的。
一个类中调用自己的函数就直接打名字,而调用外界函数(我比较喜欢叫公式)又怎么呢?
还有子父类的深层关系。
这次教程高度符号化,不会有太多文字解释


A.外界调用类中函数:
意思很简单,就是在不在当前类中调用类的函数。

  1. class A
  2.   def b
  3.     p 100
  4.   end
  5. end

  6. @a = A.new  # 建立A类为@a
  7. @a.b             # 代指调用A类的b函数
复制代码
最终窗口输出:

  1. 100
复制代码
重点在@a.b它已经代指调用A类的b函数。


然后我们看看子父类的函数关系

  1. class B
  2.   def b
  3.     p 200
  4.   end
  5. end
  6. class A < B   # 类中无物请勿奇怪
  7. end
  8. @a = A.new
  9. @a.b
复制代码
然后输出:
  1. 200
复制代码
现在我们就知道了,子类会继承父类的函数


若果子类和父类里都有同一函数,会怎么样呢?

  1. class B
  2.   def b
  3.     p "B类"
  4.   end
  5. end

  6. class A < B   # 类中无物请勿奇怪
  7.   def b
  8.     p "A类"
  9.   end
  10. end

  11. @a = A.new
  12. @a.b
复制代码
最终输出:
  1. "A类"
复制代码
我们得知:输出最近(靠后定义)的函数会覆盖之前的同名函数
那有什么方法两个都能做呢?
请看下一部分:super



B.super主要用途:
super的关键在于子父类同名函数之间,不多说,自己看:

  1. class B
  2.   def b
  3.     p "B类"
  4.   end
  5. end

  6. class A < B
  7.   def b
  8.     super
  9.   end
  10. end

  11. @a = A.new  # 建立A类
  12. @a.b             # 代指
复制代码
最终输出:
  1. "B类"
复制代码
这样就知道了:super会调用父类的同名函数。


那么这样呢?:
  1. class B
  2.   def b
  3.     p "B类"
  4.   end
  5. end

  6. class A < B
  7.   def b
  8.     super
  9.     p "A类"
  10.   end
  11. end

  12. @a = A.new
  13. @a.b
复制代码
最终输出:
  1. "B类"
  2. "A类"
复制代码
(这里只要明白原理就好了)


那么在搞一个更复杂的呢?:
  1. class B
  2.   def b
  3.     p "B类"
  4.   end
  5. end

  6. class A < B
  7.   def b
  8.     super    # 这里经过discain的提点后加回来了
  9.     p "A类"
  10.     super
  11.   end
  12. end
  13. class C < A
  14.   def b
  15.     super
  16.     p "C类"
  17.   end
  18. end

  19. @c = C.new
  20. @c.b
复制代码
最终依次输出:
  1. "B类"
  2. "A类"
  3. "B类"
  4. "C类"
复制代码
这只是逻辑思考的输出。
好了,不要说的太远了,super说了这里就好了。


总结,我们学习了:
1.super的作用
2.外界调用类中函数
有兴趣的童鞋可以看看C增值站。



看完教程请回复!!


下一课:
暂无




C.增值站
为了更多回复和新手的前途,我在这里设立了C。

既然刚才说了子类会承继所有父类的函数,那么Window_Base会提供了不少功能?
的确的,很多时候我们都会见到窗口里有:
  1. draw_XXXX
复制代码
比如draw_face、draw_actor_level、draw_actor_name
尤其可以在Window_Status里发现。(这是"状态"窗口)

那么我就委派你们做一个draw_VX
成功条件:在任何承继Window_Base的窗口能用"draw_VX"
绘画出"VX教程出版社"的字样,并且是有参数"draw_VX(X坐标, Y坐标, 宽度)"

提示:
第二课学过的"self.contents.draw_text(x, y, 高度, 宽度, 显示的变数)"来绘画字样
第X课学过的参数。就是"def draw_VX(参数们)"
在Window_Base里任何一个建立新函数。


欢迎大家讨论增值站答案。


好了,这节课上完了,谢谢大家。
(要回复啊~!)

评分

参与人数 1星屑 +24 收起 理由
Rion幻音 + 24

查看全部评分

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4869
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
2
 楼主| 发表于 2011-1-8 22:49:01 | 显示全部楼层
回复 小幽的马甲 的帖子

嗯,我的"用名"打错字了,是"同名"。
我的语言不大好~= =关于"覆盖用名"的说法我会纳用。
而"外界调用"的说法,我不能说出一个更好的说法= =。
(我的表达能力有待改善,上面的问题我会改善的了~)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4869
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
3
 楼主| 发表于 2011-2-12 22:53:45 | 显示全部楼层
本帖最后由 一箭烂YiJL 于 2011-2-12 23:16 编辑

回复 沉影不器 的帖子

我指的是前几课,你(可以叫您或者前辈吗?(我实是晚辈))可以可以跟着帖子里的这个标志:前一课:
去寻找有联系的前几课。或者:http://rpg.blue/space-uid-115768.html
访问我的空间看带"新手教程——"前覆的帖子。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

弓箭手?剑兰

梦石
0
星屑
4869
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
4
 楼主| 发表于 2011-2-24 18:23:15 | 显示全部楼层
回复 zenkl 的帖子

1.super不在函数(方法function)里会出错,
如果在def b里的话输出"B类"  "B类"  "A类" 。这就是super的作用。
如果没有了那两个super就会"A类",由于覆盖了的原因。


2.如果搞不清楚类和函数的话可以这样解释:
类是一个无名的东东(就是一个类别),比如人类(要取名),而人类继承的当然是动物,
类必须给名字,例在地球的场景里写:
class Person
#空的,哈哈哈
end
# ............到了地球的场景............
zenkl = Person.new       # 然后就有个人在地球上叫zenkl
然后就是要zenkl做出一些动作了。
函数就是方法,方法就像动作。那么比如:
class Person
  def tell_a   # 这个动作是说出"a"这个字眼
    p "a"
  end
end
# ............到了地球的场景............
zenkl = Person.new       # 地球上有个人叫zenkl
zenkl.tell_a                     # 是个说出"a"的动作,窗口输出=>"a"

评分

参与人数 1星屑 +6 收起 理由
zenkl + 6 bravo~

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-14 05:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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