查看: 2108|回复: 8

[已经解决] 有关脚本的最初级提问

[复制链接]
梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
回帖
9
发表于 2014-4-15 23:04:53 | 显示全部楼层 |阅读模式

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

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

×
近来在学习脚本
在Window-Base中第196行,

[pre lang="ruby" line="1" file="11"]# ● 绘制内容
  #     args : 与 Bitmap#draw_text 相同
  #--------------------------------------------------------------------------
  def draw_text(*args)
    contents.draw_text(*args)
  end[/pre]

意思是定义了draw_text方法,然后这个方法的内部动作是对contents执行draw_text方法,结束。
我的理解是在调用draw_text方法时,会对contents执行draw_text方法,但执行draw_text方法的内部动作又是对contents执行draw_text方法,这不就是来回的循环了吗?

可能我还是没有说明白,我就是想说,我们定义一个方法就是想以后调用它,但怎么它自己的内部动作就是执行它自己啊?

不知道我有没有说明白。呵呵···

语文、数学、英语、政治老师都死的早,大家帮帮我这失学儿童吧

星君

梦石
0
星屑
83
在线时间
2980 小时
注册时间
2011-10-9
回帖
2234

贵宾短篇七萝莉正太组冠军

发表于 2014-4-16 03:21:17 | 显示全部楼层
因为contents用的draw_text属于Bitmap类的内容,
Bitmap里的draw_text是这样的:
draw_text(x, y, width, height, str[, align])
draw_text(rect, str[, align])

このビットマップの矩形 (x, y, width, height) または rect (Rect) に文字列 str を描画します。
str が文字列のオブジェクトでない場合には、to_s メソッドにより文字列に変換してから処理を行います。
テキストの長さが矩形の幅を超える場合は、幅を 60% まで自動的に縮小して描画します。
水平方向はデフォルトで左揃えですが、align に 1 を指定すると中央揃え、2 を指定すると右揃えになります。垂直方向は常に中央揃えです。
この処理には時間がかかるため、1 フレームごとに文字列を再描画するような使い方は推奨されません。


以上为复制F1帮助内容

回复

使用道具 举报

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
回帖
9
 楼主| 发表于 2014-4-16 09:02:03 | 显示全部楼层
本帖最后由 流着水的你の眼 于 2014-4-16 09:06 编辑

谢谢您的回答,意思是方法中调用了其他类中的draw_text方法。
但在harinlen 编辑的RGSS3 教程大家写(帖子链接)中的第58页有这样一段话:

子类化:方法覆盖 但是,仅仅是集成的话是不够的。子类有些功能从根本实现上就是和父类不同的。我们怎么办呢?譬如说吧,不同动物有着不同的发声器官,动物靠它发出叫声:
[pre lang="ruby" line="1" file="254"]lass Animal
  def cry
     get_cry_organ () . cry ()
  end
  def get_cry_organ
      nil #抽象动物没有发声器官
   end
   protected : get_cry_organ
end[/pre]
其中定义方法 cry 然后它的内部动作又是对get_cry_organ ()执行cry ()方法,这里的cry ()方法,在别的地方应该没有定义过了吧,又回到了上面的问题了。

PS:我看到您回复的时间是在凌晨3点多,您要注意身体啊,写程序再忙也要注意休息啊。

点评

哦,因为我在海外,所以有时差……我发帖的时候大概是晚上9点左右了  发表于 2014-4-16 21:57
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-4-16 12:23:34 | 显示全部楼层
本帖最后由 喵呜喵5 于 2014-4-16 12:27 编辑

请看下面的代码
  1. class A
  2.   def hi
  3.     p "hi"
  4.   end
  5. end
  6. class B
  7.   def hi
  8.     p "hello"
  9.   end
  10. end
  11. a=A.new
  12. b=B.new
  13. a.hi
  14. b.hi
复制代码
你看,他们都执行hi方法,但是结果不同对吧?
然后再看这个
  1. class C
  2.   def hi
  3.     p "yes"
  4.   end
  5.   def do
  6.     a=A.new
  7.     a.hi
  8.   end
  9. end
复制代码
C类对象执行do方法后会得出什么结果你应该理解了吧?

评分

参与人数 1星屑 +8 收起 理由
taroxd + 8 我很赞同

查看全部评分

回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-4-16 12:37:18 | 显示全部楼层
流着水的你の眼 发表于 2014-4-16 09:02
谢谢您的回答,意思是方法中调用了其他类中的draw_text方法。
但在harinlen 编辑的RGSS3 教程大家写(帖子 ...

搞清楚调用方法的对象,例子参见楼上

get_cry_organ应该返回一个可以调用cry方法的对象。在抽象类中这一点没有体现出来,这个方法交给子类来实现。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
回帖
9
 楼主| 发表于 2014-4-17 21:25:22 | 显示全部楼层
流着水的你の眼 发表于 2014-4-16 09:02
谢谢您的回答,意思是方法中调用了其他类中的draw_text方法。
但在harinlen 编辑的RGSS3 教程大家写(帖子 ...

感谢 皮卡星君 的回答 ,能否再回答一下我三楼的问题,谢谢了

点评

楼上几位不是回答了嘛,因为get_cry_organ的内容是nil,所以内容要给子类去做  发表于 2014-4-18 15:45
回复

使用道具 举报

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
回帖
9
 楼主| 发表于 2014-4-17 21:26:46 | 显示全部楼层
本帖最后由 流着水的你の眼 于 2014-4-17 21:28 编辑

我次 点错了 连贴了{:7_303:}
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-4-18 17:10:47 | 显示全部楼层
本帖最后由 喵呜喵5 于 2014-4-18 17:17 编辑

请把教程后面那半段看完…………= =
  1. #~ 定义一个动物类
  2. class Animal
  3.   #~ cry方法
  4.   def cry
  5.     get_cry_organ.cry
  6.   end
  7.   #~ 获取发声器官方法
  8.   def get_cry_organ
  9.     nil
  10.   end
  11. end
  12. #~ 定义动物类的子类喵呜喵5类
  13. class Mwm5 < Animal
  14.   #~ 定义实例变量属于猫类
  15.   def initialize
  16.     @mwm5 = Cat.new
  17.   end
  18.   #~ 覆盖父类的同名方法
  19.   def get_cry_organ
  20.     @mwm5
  21.   end
  22. end
  23. #~ 定义喵呜喵5类中的一个实例变量的类猫类,这个类包含一个名为cry的方法
  24. class Cat
  25.   #~ 执行cry方法的内容
  26.   def cry
  27.     p "miao~!"
  28.   end
  29. end

  30. object = Mwm5.new
  31. object.cry
复制代码
首先我们肯定不是直接在作为父类的动物类中执行get_cry_organ.cry,因为这个类中get_cry_organ获取的内容为nil,执行cry方法肯定出错,

所以这里就有了一个子类喵呜喵5类,通过get_cry_organ在子类中可以获取一个实例变量@mwm5

于是就变成了实例变量@mwm5执行cry方法,而这个实例变量@mwm5所属的猫类中的cry方法执行的内容是“p "miao~!"”,于是最终脚本的操作就是“p "miao~!"”

这样写你看的懂吗?

点评

说起来,从逻辑上来看猫类和喵呜喵5类的地位应该对调一下,嘛反正都无所谓  发表于 2014-4-18 17:19

评分

参与人数 1梦石 +1 收起 理由
迷糊的安安 + 1 看来我的学习之路还有很远啊

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
回帖
9
 楼主| 发表于 2014-4-18 18:55:31 | 显示全部楼层
谢谢 喵呜喵5 的回答非常详细 看来我的学习之路还有很远啊
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部