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

Project1

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

[通用发布] 免alias完美重写默认脚本的update

[复制链接]
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

跳转到指定楼层
 楼主| 发表于 2013-1-20 20:12:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

15
 楼主| 发表于 2014-1-16 23:38:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1175
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

14
发表于 2014-1-16 22:51:42 | 只看该作者
但是我们很多时候都会遇到这样的尴尬:由于old_method完成了某些变量的初始化(或者其它类似的、重要的内容),我们不得不在old_method之后添加我们的内容。这个时候,include一个模块进来似乎无法解决这种尴尬。

我觉得alias最大的问题不在于名字,而在于这种Hooking的机制(或者说Patching)应该由语言本身提供,而非我们手动的去曲线救国。

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

13
 楼主| 发表于 2014-1-16 15:42:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
12
发表于 2014-1-16 15:39:55 | 只看该作者
ky52879 发表于 2014-1-16 13:48
貌似module这种方法只能用于父类中存在super的方法,如果子类中没有这个方法的话,那么module无效。。。 ...

举个简单的例子:

module A
  def abc
    p "A.abc"
    super
  end
end
class ABC
  include A
  def abc
    p "ABC.abc"
  end
end
ABC.new.abc

那么显示的只有 "ABC.abc",这个问题。。。
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
11
发表于 2014-1-16 13:48:56 | 只看该作者
貌似module这种方法只能用于父类中存在super的方法,如果子类中没有这个方法的话,那么module无效。。。

点评

不不不,我说的无效是程序不会调用这个方法,不是super无效。  发表于 2014-1-16 15:37
你可以简单认为可以写成super() if defined?(super), defined可以这么用的  发表于 2014-1-16 15:35
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
616 小时
注册时间
2010-10-29
帖子
463
10
发表于 2013-1-25 07:51:40 | 只看该作者
我不知道是否讲的是我想得,所以理解错误请兰触多多包含
——————————————————————————————————————————

据Yanfly大神所说,貌似VX打开Debug的时候会读取所有编辑器里面的脚本。但是神马Bitmap之类的不会读取。之后XXXXXX啊什么的就有可能出现堆栈过深的错误。
所以alias的时候需要
  1. alias new_name old_name unless $@
复制代码
不知道是不是跟兰触所述的效果一样呢。。。。

但是据Yanfly大神交代,VA Debug时已经不会出现这种错误了。。。因为已经全部读取了一遍了。。。。

点评

突然明白了什么什么deep时啥意思了,原来是alias重名了 0 0.  发表于 2014-1-24 23:14
VA所有的东西都是放在rgss_main的那个block里面的,用完即扔,人畜无害。  发表于 2014-1-16 22:48
恩恩,我懂了,Window_Message这种从头eval的没关系其实……  发表于 2013-1-25 15:26
我命令你给我点下面的东西!

LBQ Works
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
9
发表于 2013-1-23 13:20:45 | 只看该作者
本帖最后由 zhangbanxian 于 2013-1-23 23:15 编辑
  1. alias old_update update unless defined? old_update
复制代码
- -b其实,这个不是防f12的,只是防止脚本重名,或者哪个2b把这脚本插了两遍的措施...好吧,rgss预定义类确实不会被重定义,以前完全没注意到这玩意来着,不过一般脚本还是没啥影响的,况且va之后也好歹算是解决了- -b
话说,这个alias法还是eb官方推荐的写法来着,也算是脚本规范吧,个人觉得没啥太大问题(重名的几率还是蛮小的吧)...
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

8
发表于 2013-1-22 20:33:48 | 只看该作者
unless (MyWindow_Message)
  MyWindow_Message = Window_Message
  class Window_Message < MyWindow_Message
    #...
  end
end

这是合法的吗?

点评

- -b不可能改变已有类的父类的吧,要写也是这样写class MyWindow_Message < Window_Message;end;Window_Message = MyWindow_Message  发表于 2013-1-23 13:23
要不就干脆MyWindow_Message rescue begin ;...你的代码; end  发表于 2013-1-22 22:52
这个可能不行 unless defined?(XXX) 可以,没定义的const也是种const_missing或者异常……  发表于 2013-1-22 22:51
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

7
发表于 2013-1-22 19:42:26 | 只看该作者
UI> 這種方法有局限性。必須原方法用到了 super 。(實際上以前就知道
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
6
发表于 2013-1-21 14:04:07 | 只看该作者
简洁的方法
我每次写脚本(在自己的游戏工程/C=πd任务中)都是从Window_Base里面啃C啃V的……
【我F12 guard根本没用过= =
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 15:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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