Project1

标题: 遇到alias的BUG按F12提示stack level too deep,只有VA正常 [打印本页]

作者: 流川枫    时间: 2014-7-2 20:17
标题: 遇到alias的BUG按F12提示stack level too deep,只有VA正常
本帖最后由 流川枫 于 2014-7-2 20:32 编辑

class << Graphics
  alias original_update update
  def update
    original_update
  end
end

将以上脚本加到VX和XP进入游戏按F12会提示以下错误,但VA是正常的。



---------------------------
Project4
---------------------------
脚本 ' ' 的第 4 行发生了 SystemStackError .

stack level too deep
---------------------------
确定   
---------------------------
作者: taroxd    时间: 2014-7-2 20:17
本帖最后由 taroxd 于 2014-7-2 20:24 编辑
  1. alias_method :original_update, :update unless method_defined? :original_update # 私有方法一边去
复制代码
因为坑爹的XP和VX在F12时不会重新加载RGSS内部脚本

VA干脆连外部的也不重新加载了,省了很多事。但是在将Bitmap设为常量/类变量的时候,仍然会出现 disposed_bitmap 问题。
作者: 刺夜之枪    时间: 2014-7-2 20:18
现在流行在水区提问?
作者: 流川枫    时间: 2014-7-2 20:24
taroxd 发表于 2014-7-2 20:17
因为坑爹的XP和VX在F12时不会重新加载RGSS内部脚本

VA干脆连外部的也不重新加载了,省了很多事。但是在将B ...

试了不行,因为根本就没有调用原始的更新
作者: 怪蜀黍    时间: 2014-7-2 20:26
  1. alias original_update update
  2.   def update
  3.     original_update
  4.   end
复制代码
这个alias有什么意义?什么都没有追加,没有任何意义直接删去得了。
作者: taroxd    时间: 2014-7-2 20:26
流川枫 发表于 2014-7-2 20:24
试了不行,因为根本就没有调用原始的更新

我这边试没有问题啊?

  1. class << Graphics
  2.   alias_method :up, :update unless method_defined? :up
  3.   def update
  4.     up
  5.   end
  6. end
复制代码

作者: 流川枫    时间: 2014-7-2 20:31
taroxd 发表于 2014-7-2 20:26
我这边试没有问题啊?

好吧,刚才我可能复制粘贴出错了,OK了!
作者: fux2    时间: 2014-7-2 20:33
流川枫 发表于 2014-7-2 20:24
试了不行,因为根本就没有调用原始的更新


你对汇编有研究这种东西应该难不住你,详细的跟踪DefWindowProc是如何处理F12的按键消息的。
我说个大概。
抛出Reset异常,eval以下内容
Graphics._reset
Input.update
Audio.me_stop
Audio.se_stop
Audio.bgm_stop
Audio.bgs_stop
GC.start

其中并没有取消alias命名的别名,处理方式也不难。
在每个alias后面加上unless $@就行。
作者: 流川枫    时间: 2014-7-2 20:35
fux2 发表于 2014-7-2 20:33
你对汇编有研究这种东西应该难不住你,详细的跟踪DefWindowProc是如何处理F12的按键消息的。
我说个大概 ...

ruby语言我只是看了RM自带的帮助,alias在帮助里没介绍这么详细所以不知道




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1