赞 | 12 |
VIP | 107 |
好人卡 | 6 |
积分 | 4 |
经验 | 31122 |
最后登录 | 2024-6-29 |
在线时间 | 1606 小时 |
Lv2.观梦者 傻♂逼
- 梦石
- 0
- 星屑
- 374
- 在线时间
- 1606 小时
- 注册时间
- 2007-3-13
- 帖子
- 6562
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
玩过网游没有?
没有?你丫死开。
玩过,好!知道网游的录像功能吗?
不知道?!- -|||(擦汗)
知道。那知道这个脚本干麻用吗?
不知道?哦,对我没说。
这个脚本就是提供 录像功能的脚本。
使用方法:
插入到Main以前。
按F5 (任意场合)录像!
注意!
这个程序只提供F5 录像。
播放必须要:
$notgc = RedOle.new(文件名,循环?)
update 里
$notgc.update
脚本内容:
- module Graphics
- LoaderFPS = 30
- end
- #Graphics::LoaderFPS
- class Font
- def marshal_dump;end
- def marshal_load(obj);end
- end
- class Bitmap
- # 传送到内存的API函数
- RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
- RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
- def _dump(limit)
- data = "rgba" * width * height
- RtlMoveMemory_pi.call(data, address, data.length)
- [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
- end
- def self._load(str)
- w, h, zdata = str.unpack("LLa*"); b = new(w, h)
- RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4); b
- end
- # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
- #
- def address
- buffer, ad = "xxxx", object_id * 2 + 16
- RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
- RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
- RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
- end
- end
- class << Graphics
- #--------------------------------------------------------------------------
- # ● 更新处理
- #--------------------------------------------------------------------------
- alias old_update update
- def update
- @c = 0 if @c.nil?
- @ot = Time.now if @ot.nil?
- if (Time.now - @ot) >= 1
- @c = 0
- @ot = Time.now if @ot.nil?
- end
- old_update
- $cut_loop = false if $cut_loop == nil
- if ($cut_loop)
- $cc = []if $cc == nil
- if Input.trigger?(Input::F5)
- end_cut
- end
-
- # if @c <= Graphics::LoaderFPS
- Marshal.dump(Graphics.snap_to_bitmap,@f) if $cut_loop
- # end
- # @c = @c+1
-
- else
- if Input.trigger?(Input::F5)
- begin_cut
- end
- end
- end
- def begin_cut
- @f = File.open("Lop" + (Dir["Lop*.dvi"].size+1).to_s + ".dvi","wb")
- $cut_loop = true
- print "开始录像!"
- #$cc = []
- end
- def end_cut
- $cut_loop = false
- #print "开始保存!"
- @f.close
- print "保存完毕!"
- #$cc = []
- end
- end
- class RedOle
- def initialize(fn="er",repeat=false)
- if fn=="er"
- p "ERROR"
- exit
- end
- @repeat = repeat
- @s = Sprite.new#(v)
- @f = File.open(fn,"rb")
- @pc = Marshal.load(@f)
- @fn = fn
- @s.bitmap = @pc
- end
- def update
- @c = 0 if @c.nil?
- @ot = Time.now if @ot.nil?
- if (Time.now - @ot) >= 1
- @c = 0
- @ot = Time.now if @ot.nil?
- end
- begin
- if @c <= Graphics::LoaderFPS
- @pc = Marshal.load(@f)
- @s.bitmap = @pc
- @c += 1
- end
-
- rescue
- dispose(true)
- end
- end
- def dispose(f=false)
- @pc = nil
- @s.bitmap.dispose
- @s.dispose
- begin
- @f.close
- rescue
- if @repeat and f
- initialize(@fn,true)
- end
- end
- GC.start
- end
- def dispose?
- return @pc.nil?
- end
- end
复制代码
但是这个程序有个缺点。
录像具反馈FPS=0~5
播放=20~40(50)
还有就是文件大小偏大(高保真,32位的拉{/gg}总之播放效果很好)
|
|