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

Project1

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

[已经解决] 写了一个开关窗口的小脚本看看有什么问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
跳转到指定楼层
1
发表于 2017-7-21 11:21:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. class Object
  2.   private
  3.   def get_instance_variables(class_name = Object)
  4.     result = []
  5.     set_instance_variables(class_name) { |ivar| result.push(ivar) }
  6.     return result
  7.   end
  8.   def set_instance_variables(class_name = Object, &action)
  9.     instance_variables.each do |varname|
  10.       ivar = instance_variable_get(varname)
  11.       action.call(ivar) if ivar.is_a?(class_name)
  12.     end
  13.   end
  14. end
  15. class Scene_Base
  16.   alias old_start start
  17.   def start
  18.     old_start
  19.     set_instance_variables(Window) { |window| window.openness = 0 }
  20.   end
  21.   alias old_post_start post_start
  22.   def post_start
  23.     old_post_start
  24.     set_windows(true)
  25.   end
  26.   alias old_pre_terminate pre_terminate
  27.   def pre_terminate
  28.     old_pre_terminate
  29.     set_windows(false)
  30.   end
  31.   def set_windows(open_or_close)
  32.     set_instance_variables(Window) { |window| open_or_close ? window.open : window.close }
  33.     begin
  34.       set_instance_variables(Window) { |window| window.update }
  35.       update_basic
  36.     end until get_instance_variables(Window).first.openness == (open_or_close ? 255 : 0)
  37.   end
  38. end
复制代码
如题,这个脚本的用处是像VX一样每次进入新的Scene的时候(post_start)都会有一个窗口渐渐(也不能算“渐渐”,不过就几帧而已)打开,换到别的Scene之前(pre_terminate)也会把窗口渐渐关闭。
使用脚本时出现堆栈过深(Stack too deep,好像是这么说的吧)错误,找不到错误的根源。注释掉这些内容之后错误消失。
望大神解决。
另外为什么RPG Maker VX Ace 讨论区的欢迎图片提到的是提问区而不是讨论区?

点评

嗯哼为什么在toggle里面插入网络图片(http://attach.66rpg.com/bbs/attachment/forum/201402/26/174422gxhxy03xz0jaaj2g.gif)没用?(莫名消失??)  发表于 2017-7-21 11:23
小仙女一枚~

Lv5.捕梦者 (版主)

梦石
1
星屑
23989
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2017-7-21 12:05:48 | 只看该作者
本帖最后由 guoxiaomi 于 2017-7-21 12:17 编辑

关于问题,会不会是 window.update 方法中在某些情况下不改变 openness?如果没有改变就会死循环吧。

不是很懂,但是有2个建议:
set_instance_variables -> iterate_instance_in_class
以及36行的 until 后面的内容不需要每次都调用,你既然只看第一个 Window 对象,直接在循环前单独取出来比每次循环都遍历全部的实例变量要好吧?


不行还是觉得诡异,既然 get_instance_variables(Window) 返回全体 Window 对象的数组,把这个数组存起来,然后 set_window 里遍历这个数组就可以吧。我只是觉得很诡异,但是这样做应该不能解决问题。

点评

死循环只会不停地调用Graphics.update,并不会报错  发表于 2017-7-21 14:18
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
22069
在线时间
9455 小时
注册时间
2012-6-19
帖子
7123

开拓者短篇九导演组冠军

3
发表于 2017-7-21 13:09:41 | 只看该作者
1.先说明报错位置
2.检查报错位置是否是
  alias old_start start
  alias old_post_start post_start
  alias old_pre_terminate pre_terminate
如果是的话,
在脚本里把 old_start 全局替换成 old_20170721_start
在脚本里把 old_post_start 全局替换成 old_20170721_post_start
在脚本里把 old_pre_terminate 全局替换成 old_20170721_pre_terminate

点评

没有报错位置……这正是我觉得诡异的地方 它就说发生了某某某错误(一个Exception对象),然后没了  发表于 2017-7-21 14:05
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1674
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

4
发表于 2017-7-21 14:24:57 | 只看该作者
本帖最后由 铅笔描绘的思念 于 2017-7-21 14:36 编辑

首先建议是不要污染标准库。。然后测试并没有stack level too deep
只有
fix:



而且有个问题就是 地图场景一直显示Window_Message和Window_MapName啊。。就不能排除下本来openness为0的window么

点评

不过Window_Message的问题还是非常值得思考的  发表于 2017-7-21 20:50
好像按照你的方法确实解决了我想要解决的问题(但是为什么弹出堆栈过深的错误仍然匪夷所思,也许是量子层面的偶尔扰动造成的?(误))  发表于 2017-7-21 20:50
因为弹错了 按照错误提示就这样改咯也没想什么原因233  发表于 2017-7-21 14:30
另外一个Window对象当openness==0的时候好像是不会自动dispose的吧?  发表于 2017-7-21 14:29
嗯那个 为什么我显示的是堆栈过深??你的方法我试一试  发表于 2017-7-21 14:28
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
5
 楼主| 发表于 2017-7-21 20:54:50 | 只看该作者
想要解决的问题应该解决了,但是Window_Message却会被提前打开……这只需要修改Scene_Map内的内容就行了应该
另外需要把old_start下面那一行东西剪切到old_post_start上面,不然会有bug,主要是因为Scene_Base的子类一般都是先调用父类的start再创建窗口而不是与之相反,所以在old_start之后将所有Window对象的openness设为0是无用的,把它换到old_post_start之前才能很好地解决问题
小仙女一枚~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-16 07:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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