查看: 2022|回复: 8

[已经解决] 基础脚本问题

[复制链接]
梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
发表于 2013-4-16 16:44:25 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 爆发的妞 于 2013-4-27 17:10 编辑

在 Game_Battler_1 脚本里面
有例如这样的方法

  #--------------------------------------------------------------------------
  # ● 获取速度
  #--------------------------------------------------------------------------
  def agi
    n = [[base_agi + @agi_plus, 1].max, 999].min
    for i in @states
      n *= $data_states.agi_rate / 100.0
    end
    n = [[Integer(n), 1].max, 999].min
    return n
  end

这里面的base_agi应该是方法吧。 但是我怎么找不到这个方法呢?

万兽

梦石
0
星屑
602
在线时间
2271 小时
注册时间
2006-11-4
回帖
4701

贵宾

发表于 2013-4-16 17:20:38 | 显示全部楼层
请用全局搜索ctrl+shift+f
这个方法在Game_Actor和Game_Enemy内分别都有定义过。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 2013-4-16 18:46:30 | 显示全部楼层
弗雷德 发表于 2013-4-16 17:20
请用全局搜索ctrl+shift+f
这个方法在Game_Actor和Game_Enemy内分别都有定义过。

谢谢你的回答, 是有这个方法,我找到了。

但是有个疑问啊:
Game_Actor 是继承于Game_Battler的。
为什么Game_Battler没有这个方法啊。 不是应该在父类
有个抽象方法或方法,让子类去重写吗?难道这是Ruby的特性?
新手求解答。
回复

使用道具 举报

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 2013-4-16 22:21:34 | 显示全部楼层
本帖最后由 亿万星辰 于 2013-4-16 22:23 编辑

你有见过Game_Battler的对象么?
或者说,你有见过Game_Battler.new么?
我们见到的都是Game_Actor和Game_Enemy的对象,而只有这些对象们会调用.agi等等的方法,所以~
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
回帖
420
发表于 2013-4-17 06:33:11 来自手机 | 显示全部楼层
本帖最后由 SuperMario 于 2013-4-17 06:38 编辑

子类直接继承父类的方法,还可以用 super 对其修改,或重新定义。不过父类去直接调用子类的方法是不好的写法。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 2013-4-17 10:15:14 | 显示全部楼层
SuperMario 发表于 2013-4-17 06:33
子类直接继承父类的方法,还可以用 super 对其修改,或重新定义。不过父类去直接调用子类的方法是不好的写 ...

恩 。 我就是对于父类没有这个方法,但是父类可以调用子类的这个方法,感到很困惑,

java,C#等没有这种写法的。 如果ruby支持这样搞,当然我就只有接受了。哈哈。

还有父类调用子类,我可能有不同的意见, 这样也是有好处的, 模板方法模式基本上都是

这种写法。定义一个算法或流程 ,让子类去实现。谢谢大家的回答。  我在好好看看学习下。  
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 2013-4-17 10:24:47 | 显示全部楼层
亿万星辰 发表于 2013-4-16 22:21
你有见过Game_Battler的对象么?
或者说,你有见过Game_Battler.new么?
我们见到的都是Game_Actor和Game_E ...

恩。谢谢你的回答。 你说的是对的。 Game_Battler没有实例化的,

是为了他的子类服务的。 可能误解我的意思了。  我说的是Game_Battler

没有某个方法, 但是Game_Actor有这个方法, 应该不算重写父类的方法吧。

但是他这样做了。 所以有点疑惑。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
回帖
420
发表于 2013-4-17 17:10:43 | 显示全部楼层
爆发的妞 发表于 2013-4-17 10:15
恩 。 我就是对于父类没有这个方法,但是父类可以调用子类的这个方法,感到很困惑,

java,C#等没有这种 ...

似乎我没有说清楚- -b
父类是不能调用子类方法的;但是子类能直接调用父类的。
游戏中并没有使用到 Game_Battler 类实例,所以这样写并不会导致出错。我只是觉得这样写不好而已,因为一个类有一个它自身无法使用的方法。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 2013-4-17 17:20:55 | 显示全部楼层
SuperMario 发表于 2013-4-17 17:10
似乎我没有说清楚- -b
父类是不能调用子类方法的;但是子类能直接调用父类的。
游戏中并没有使用到 Game_ ...

恩。好的。 谢谢。我明白了。
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部