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

Project1

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

[已经解决] 请问各种插件中的alias为什么要加这个语句?

[复制链接]

Lv2.观梦者

梦石
0
星屑
396
在线时间
22 小时
注册时间
2018-1-31
帖子
29
跳转到指定楼层
1
发表于 2018-6-18 07:06:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
alias是为方法取别名的语句,据说这样可以减少冲突,但是为什么这样取了个别名就可以防冲突呢?这里面的机制到底是什么?
求大佬解答orz

Lv4.逐梦者

梦石
2
星屑
13363
在线时间
2300 小时
注册时间
2011-6-4
帖子
618
2
发表于 2018-6-18 09:25:38 | 只看该作者
本帖最后由 真·可乐 于 2018-6-18 09:30 编辑

我做一个ARPG游戏, 我想在Game_Event的update里添加判定死亡的方法,当HP为0时则判定死亡
直接新建一个脚本
  1. class Game_Event
  2.    def update
  3.     verifydeath #判定死亡的方法
  4.     end

  5. end
复制代码


这样写会脚本错误,因为Game_Event里的update被重写了,只执行verifydeath这个方法,原来的内容不会执行了
解决方法A:不新建脚本,直接在Game_Event的update里写上verifydeath
这个用于自己的工程完全可以,但是第三方插件就是要做到即插即用啊,怎么样在不修改原来的Game_Event的同时,在Game_Event的update里添加内容呢?
解决方法B:把原来的update内容全复制过来,再在其中写上verifydeath
  1. class Game_Event
  2.    def update
  3.        super
  4.        verifydeath #判断死亡的方法
  5.        # 自动启动事件判定
  6.        check_event_trigger_auto
  7.        # 并行处理有效的情况下
  8.            if @interpreter != nil
  9.              # 不在执行中的场合的情况下
  10.                   unless @interpreter.running?
  11.                   # 设置事件
  12.                  @interpreter.setup(@list, @event.id)
  13.                  end
  14.            # 更新解释器
  15.            @interpreter.update
  16.           end
  17.      end
  18. end
复制代码



如果只有一个插件要在Game_Event的update里添加内容的话,这种方法也是可以的。可是这明显很鸡肋
解决方法C:alias大法
  1. class Game_Event
  2. alias new_update update
  3.    def update
  4.     new_update
  5.     verifydeath #判定死亡的方法
  6.     end

  7. end
复制代码
给原来的update取别名叫new_update,new_update就包括原来update里的内容,再在新定义的update里加上new_update,这样在执行新定义update的时候原来的update的内容也可以执行了
说白了使用alias可以达成的效果是:在不改动原始脚本库的条件下,向原脚本库里的某个方法里添加内容





评分

参与人数 3星屑 +15 +2 收起 理由
b54521101 + 1 做老师的料
怪蜀黍 + 1 认真
fux2 + 15 认真

查看全部评分

BUG反馈请加QQ 529283039
水友群 917854767

回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
3
发表于 2018-6-18 10:16:45 | 只看该作者
本帖最后由 灯笼菜刀王 于 2018-6-18 10:20 编辑

因为如果直接def, 那就是后来者居上, 同样的方法, 后面的脚本会覆盖掉前面的, 一些热门地盘十分紧俏, 那就相当于用到这些热门地盘的插件就只能选择一个使用了, 你不会纠结么

但是用了alias就不一样,它相当于在热门地盘贴一块自己的专属方法上去, 不影响原本的方法, 这样,大家就不用抢地盘了,需要在原来的方法上加上自己的东西,就alias贴一块上去, 各自用各自的专属地盘。这样不是很和谐了么~

除非撞大运碰到两个重定义还是用一样的名字(你们可以结婚去了)

但是alias 多了不利于脚本修改和除错,所以如果自己用的话,还是直接整合到一个def里比较好。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4598
在线时间
1206 小时
注册时间
2016-4-7
帖子
982

开拓者

4
发表于 2018-6-18 19:14:20 | 只看该作者
单独的 alias 从来都没有防止冲突的意思
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42355
在线时间
7599 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

5
发表于 2018-6-19 10:55:03 | 只看该作者
一种可以调用现同名方法的手段,也算是避免和其他部分脚本产生冲突吧。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
396
在线时间
22 小时
注册时间
2018-1-31
帖子
29
6
 楼主| 发表于 2018-6-19 18:16:28 | 只看该作者
真·可乐 发表于 2018-6-18 09:25
我做一个ARPG游戏, 我想在Game_Event的update里添加判定死亡的方法,当HP为0时则判定死亡
直接新建一个脚 ...

好像懂了!谢谢!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
396
在线时间
22 小时
注册时间
2018-1-31
帖子
29
7
 楼主| 发表于 2018-6-19 18:17:00 | 只看该作者
灯笼菜刀王 发表于 2018-6-18 10:16
因为如果直接def, 那就是后来者居上, 同样的方法, 后面的脚本会覆盖掉前面的, 一些热门地盘十分紧俏, 那就 ...

好的谢谢大佬!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
396
在线时间
22 小时
注册时间
2018-1-31
帖子
29
8
 楼主| 发表于 2018-6-19 18:18:59 | 只看该作者
fux2 发表于 2018-6-19 10:55
一种可以调用现同名方法的手段,也算是避免和其他部分脚本产生冲突吧。

SOGA!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 07:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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