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

Project1

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

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
帖子
13
跳转到指定楼层
1
发表于 2014-4-15 23:04:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

RUBY 代码复制下载
  1. # ● 绘制内容
  2.   #     args : 与 Bitmap#draw_text 相同
  3.   #--------------------------------------------------------------------------
  4.   def draw_text(*args)
  5.     contents.draw_text(*args)
  6.   end


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

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

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

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

Lv1.梦旅人

星君

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

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

2
发表于 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帮助内容

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
帖子
13
3
 楼主| 发表于 2014-4-16 09:02:03 | 只看该作者
本帖最后由 流着水的你の眼 于 2014-4-16 09:06 编辑

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

子类化:方法覆盖 但是,仅仅是集成的话是不够的。子类有些功能从根本实现上就是和父类不同的。我们怎么办呢?譬如说吧,不同动物有着不同的发声器官,动物靠它发出叫声:
RUBY 代码复制下载
  1. lass Animal
  2.   def cry
  3.      get_cry_organ () . cry ()
  4.   end
  5.   def get_cry_organ
  6.       nil #抽象动物没有发声器官
  7.    end
  8.    protected : get_cry_organ
  9. end

其中定义方法 cry 然后它的内部动作又是对get_cry_organ ()执行cry ()方法,这里的cry ()方法,在别的地方应该没有定义过了吧,又回到了上面的问题了。

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

点评

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

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

4
发表于 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 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

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

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

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

使用道具 举报

Lv1.梦旅人

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

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

点评

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
帖子
13
7
 楼主| 发表于 2014-4-17 21:26:46 | 只看该作者
本帖最后由 流着水的你の眼 于 2014-4-17 21:28 编辑

我次 点错了 连贴了{:7_303:}
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

8
发表于 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 看来我的学习之路还有很远啊

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2014-3-18
帖子
13
9
 楼主| 发表于 2014-4-18 18:55:31 | 只看该作者
谢谢 喵呜喵5 的回答非常详细 看来我的学习之路还有很远啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-25 07:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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