Project1

标题: [不是创意的创意]灼眼夏娜的10s脚本的一些小改进[12/29更新] [打印本页]

作者: 精灵使者    时间: 2009-8-28 11:54
标题: [不是创意的创意]灼眼夏娜的10s脚本的一些小改进[12/29更新]
本帖最后由 精灵使者 于 2009-12-29 21:26 编辑

以前的10s脚本用着很顺手,给大家带来了福音。但是精灵测试依然会随机出现hangup的错误,而且容易出错……
http://rpg.blue/web/index.php?doc-view-4285
这是以前的传送门。
它其中的这段
  1. class << Graphics

  2. alias origin_update update unless method_defined? :origin_update

  3. def update
  4.   Thread.critical = true
  5.   origin_update
  6.   Thread.critical = false
  7. end

  8. end
复制代码
只注重了update的防止冲突工作,而精灵发现的hangup结果大多数都是出现在installize和dispose下……
莫非……根据ProfessionR的提醒,transition,freeze,还有update是graphics的三部分……
而在transition阶段的时候如果执行update,肯定会死机或者报错……
解决办法如下:
紧急修正一个死循环的错误恩……
  1. class << Graphics
  2. @@frozen = false
  3. alias origin_update update unless method_defined? :origin_update
  4. alias origin_transition transition unless method_defined? :origin_transition

  5. def update
  6.   @@frozen = true
  7.   origin_update
  8.   @@frozen = false
  9. end
  10. def transition(*args)
  11.   @@frozen = true
  12.   origin_transition(*args)
  13.   @@frozen = false
  14. end
  15. def frozen_plus
  16.     return @@frozen
  17. end
  18. end
  19. if @update_thread.nil?
  20. @update_thread = Thread.new{loop{Graphics.update if !Graphics.frozen_plus ;
  21. sleep(9)}}
  22. end
复制代码
精灵刚刚才发现的新版本……
  1. if @update_thread.nil?
  2. @update_thread = Thread.new{loop{Graphics.update;sleep(9)}}
  3. end
  4. class << Graphics
  5. alias origin_update update unless method_defined? :origin_update
  6. alias origin_transition transition unless method_defined? :origin_transition
  7. alias origin_freeze freeze unless method_defined? :origin_freeze

  8. def update
  9.   Thread.critical = true
  10.   origin_update
  11.   Thread.critical = false
  12. end
  13. def transition(*args)
  14.   Thread.critical = true
  15.   origin_transition(*args)
  16.   Thread.critical = false
  17. end
  18. def freeze
  19.   Thread.critical = true
  20.   origin_freeze
  21.   Thread.critical = false
  22. end
  23. end
复制代码
这样做是不是更加简洁一点……不过这两段脚本原理都有异曲同工之妙,希望大家任意选用。
作者: 凌辰    时间: 2009-8-28 11:58
其实……很多人都不会用那个夏娜10秒- -b
作者: IamI    时间: 2009-8-28 12:13
其实……我是路过的……把难听的话藏起来
杞人忧天。
作者: 精灵使者    时间: 2009-8-28 12:23
现在发现,graphic是个module类,如何判断graphic正在translation或者freeze阶段呢?
graphic.frozen?
作者: DeathKing    时间: 2009-8-28 15:06
夏娜的10s对高手有用,特别是要利用RM搞恶作剧的。
作者: 赤点    时间: 2009-8-28 15:08
为什么我不会举起???
我就闲了个图片
然后不断在某个文件夹里生成垃圾文件
都不会hang up?
作者: 精灵使者    时间: 2009-8-28 15:17
本帖最后由 精灵使者 于 2009-9-2 11:46 编辑

你是否打开了啥文件= =
或者那个图片的路径是否正确。
经精灵验证,Graphics.freeze后面可以update,Graphics.transition期间不能update,否则会报错……
于是在ImaI的大力帮助下将其改为了这样:
  1. class << Graphics
  2. @@frozen = false
  3. alias origin_update update unless method_defined? :origin_update
  4. alias origin_transition transition unless defined? origin_transition

  5. def update
  6.   Thread.critical = true
  7.   origin_update
  8.   Thread.critical = false
  9. end
  10. def transition(*args)
  11.   @@frozen = true
  12.   origin_transition(*args)
  13.   @@frozen = false
  14. end
  15. def frozen_plus
  16.     return @@frozen
  17. end
  18. end
  19. if @update_thread.nil?
  20. @update_thread = Thread.new{loop{Graphics.update if !Graphics.frozen_plus ;
  21. sleep(9)}}
  22. end
复制代码

作者: 赤点    时间: 2009-8-28 15:24
我做了个类病毒的东东
我都不会hand up
作者: 霜冻之狼    时间: 2009-8-28 15:29
都是脚本高手,支持下
作者: 越前リョーマ    时间: 2009-8-28 15:56
大游戏才有用吧……
作者: 精灵使者    时间: 2009-8-28 16:43
我想着应该做游戏的时候必备的恩
p.s.刚才少写了个叹号,修正下
作者: 越前リョーマ    时间: 2009-8-28 17:18
一般不会出现脚本已备份吧……
作者: 精灵使者    时间: 2009-8-28 18:03
本帖最后由 精灵使者 于 2009-9-6 19:40 编辑

啊,据我所知,梦单,魔力,包括我的大游戏都会显示脚本备份,恩。
尤其是一些低配置机器在运行的时候。
精灵刚刚发现thread.critical的说法……希望问问大家。
Thread.critical = newstate
当其值为真时,将不会进行线程切换。若当前线程挂起(stop)或有信号(signal)干预时,其值将自动变为false。

但是,当使用Thread.new生成新线程时,新线程将被执行。另外,还可以使用Thread.pass进行显式地切换。

它返回布尔值。在赋值形式中,它返回右边的newstate。

注意: 若涉及到I/O,GC或扩展库的问题时,该标识可能会被忽视.若想进行互斥操作的话,不要使用该方法,而应该使用Mutex或Monitor.


所以我主楼更新了critical的版本,不知道是否可以使用。

不过我感觉,如果是前面的frozen版本的话,transition的时候会造成无限循环而消耗资源——所以推荐后面的critical版本……不过frozen版本已经同步更新了,欢迎大家使用。
作者: 缥缈风    时间: 2009-8-30 09:15
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2009-8-31 22:39
嘛啊……就当作一个手段吧……
多着不多少者不少……
巨型游戏大概能用得上。
作者: orochi2k    时间: 2009-9-1 00:54
在用VX的DLL配合RMXP开发的某人飘过
作者: 天使喝可乐    时间: 2009-9-7 10:45
插入这段脚本就会避免"脚本已备份"?
那这句  @update_thread = Thread.new{loop{Graphics.update;sleep(9)}} if @update_thread.nil?  还用插入不?
作者: 精灵使者    时间: 2009-9-7 18:00
不需要了恩。
这两段脚本都有这一句恩,请放心使用
作者: DeathKing    时间: 2009-9-27 22:13
我做了个类病毒的东东
我都不会hand up
赤点 发表于 2009-8-28 15:24


"hand up"不是交出吗?

是hangup么?
作者: 精灵使者    时间: 2009-12-29 21:21
顶上来,少写个冒号,紧急修正……




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