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
这是以前的传送门。
它其中的这段
class << Graphics
alias origin_update update unless method_defined? :origin_update
def update
Thread.critical = true
origin_update
Thread.critical = false
end
end
复制代码
只注重了update的防止冲突工作,而精灵发现的hangup结果大多数都是出现在installize和dispose下……
莫非……根据ProfessionR的提醒,transition,freeze,还有update是graphics的三部分……
而在transition阶段的时候如果执行update,肯定会死机或者报错……
解决办法如下:
紧急修正一个死循环的错误恩……
class << Graphics
@@frozen = false
alias origin_update update unless method_defined? :origin_update
alias origin_transition transition unless method_defined? :origin_transition
def update
@@frozen = true
origin_update
@@frozen = false
end
def transition(*args)
@@frozen = true
origin_transition(*args)
@@frozen = false
end
def frozen_plus
return @@frozen
end
end
if @update_thread.nil?
@update_thread = Thread.new{loop{Graphics.update if !Graphics.frozen_plus ;
sleep(9)}}
end
复制代码
精灵刚刚才发现的新版本……
if @update_thread.nil?
@update_thread = Thread.new{loop{Graphics.update;sleep(9)}}
end
class << Graphics
alias origin_update update unless method_defined? :origin_update
alias origin_transition transition unless method_defined? :origin_transition
alias origin_freeze freeze unless method_defined? :origin_freeze
def update
Thread.critical = true
origin_update
Thread.critical = false
end
def transition(*args)
Thread.critical = true
origin_transition(*args)
Thread.critical = false
end
def freeze
Thread.critical = true
origin_freeze
Thread.critical = false
end
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的大力帮助下将其改为了这样:
class << Graphics
@@frozen = false
alias origin_update update unless method_defined? :origin_update
alias origin_transition transition unless defined? origin_transition
def update
Thread.critical = true
origin_update
Thread.critical = false
end
def transition(*args)
@@frozen = true
origin_transition(*args)
@@frozen = false
end
def frozen_plus
return @@frozen
end
end
if @update_thread.nil?
@update_thread = Thread.new{loop{Graphics.update if !Graphics.frozen_plus ;
sleep(9)}}
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