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

Project1

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

[已经过期] 关于"类"的一点疑问?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

跳转到指定楼层
1
发表于 2015-4-28 22:23:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
游戏默认脚本里面已经有class Game_Actors了。而且里面也定义了武器和装备可以穿的场合的方法。然后我在一款游戏里面的脚本看见在别处也同样定义了这个类,而且同样也定义了一样的方法,就连使用的类名和方法名都相同。那么我想请问一下,这样不冲突么。如果我想修改脚本,让装备和武器有等级限制。到底实在默认脚本里面修改呢?还是在别人重新定义的那个类里面修改呢?

Lv5.捕梦者

梦石
0
星屑
33427
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-4-28 22:32:45 | 只看该作者
最靠近 main 的那个类里修改。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

3
发表于 2015-4-28 22:34:17 | 只看该作者
类中:
  方法的重定义:
    def a; 1; end
    def a; '一'; end
    p a #=> '一'
所以说这种"再写一遍"的姿势是正确的

评分

参与人数 1星屑 +150 收起 理由
RyanBern + 150 认可答案

查看全部评分


  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

4
 楼主| 发表于 2015-4-28 22:45:34 | 只看该作者
kuerlulu 发表于 2015-4-28 22:34
类中:
  方法的重定义:
    def a; 1; end

那这个类不在同一个目录里面写,也是一样的效果么?
比如我先写一个
class A
  def b
   p 1
end
end
然后我再写一个
  class A
   def b
    p 2
end
end
他是会按照第二个来显示,就是p 2对吧。也和上面那位说的,靠近main的有效。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

5
 楼主| 发表于 2015-4-28 22:53:21 | 只看该作者
芯☆淡茹水 发表于 2015-4-28 22:32
最靠近 main 的那个类里修改。

刚才我实验了一下。发现脚本还是按照从上往下的顺序来执行呢。如果我是在靠近main那个类修改,是两个都要修改,还是只需要修改一个呢

点评

很显然只改一个。如果改两个,LZ就不会提这个问题了。  发表于 2015-4-29 22:15
总觉得有点像小人版的@怪蜀黍 既视感=w= ……  发表于 2015-4-29 15:36
同一个类里的同名方法,后定义的会覆盖前面定义的,也就是下面的覆盖上面的。你要修改最好用别名alias的方式来修改比较好  发表于 2015-4-28 23:07
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
6
发表于 2015-4-29 21:29:37 | 只看该作者
后面的方法覆盖前面的方法
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

7
 楼主| 发表于 2015-4-29 23:09:23 | 只看该作者
汪汪 发表于 2015-4-29 21:29
后面的方法覆盖前面的方法

懂了。靠近Main也就是后面的方法确实覆盖了前面定义的方法。那么我要是把后面定义的方法删掉,直接在前面定义的方法里面写,是不是一样的?还有,后面方法的类前面定义了module。我要是删掉本类的方法,在之前的地方写,会不会有影响?

点评

不管我怎么回答,软件表达出来的为最终解释  发表于 2015-5-1 10:15
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
8
发表于 2015-4-30 01:33:14 | 只看该作者
不建议你直接在前面改,首先不符合rm编程规范,其次是遇到问题回复困难。要养成重定义的习惯。类的重定义能让修改的部分变得更直观。
类的重定义只是类方法的增修。

点评

老手直接重写就是了  发表于 2015-5-1 06:53
新手的话确实推荐重定义,如果是老手那就可以随便定义了。  发表于 2015-4-30 08:16
偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2324
在线时间
567 小时
注册时间
2012-5-3
帖子
86

开拓者

9
 楼主| 发表于 2015-5-1 23:13:20 | 只看该作者
芯☆淡茹水 发表于 2015-4-28 22:32
最靠近 main 的那个类里修改。

def equipable?(item)
   # 武器的情况
   if item.is_a?(RPG::Weapon)
     # 包含当前的职业可以装备武器的场合
     if $data_classes[@class_id].weapon_set.include?(item.id) and item.level.to_i<=@level
       if item.str.to_i<= str and item.dex.to_i<= dex and item.agi.to_i<= agi and item.int.to_i<= int
       return true
       end
     end
   end
我想问一下,这一块的item参数是属于临时参数对吧。那么它在后面的if语句里面有个item.id的调用。但是这个item没有id这个方法啊?求解
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33427
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

10
发表于 2015-5-2 00:42:33 | 只看该作者
邱小谦 发表于 2015-5-1 23:13
def equipable?(item)
   # 武器的情况
   if item.is_a?(RPG::Weapon)

既然第一个判断已经通过,这句: if $data_classes[@class_id].weapon_set.include?(item.id)
应该是默认脚本原语句。
在 Game_Actor 里有没有 item 的方法定义?
或者你把报错内容说下。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-12 03:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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