Project1
标题:
Marshal拓展系列(文件dump/load)【3】
[打印本页]
作者:
一箭烂YiJL
时间:
2011-5-7 14:50
标题:
Marshal拓展系列(文件dump/load)【3】
本帖最后由 一箭烂YiJL 于 2011-5-22 10:15 编辑
序
又是一堆不大众化的脚本,当我们用类似Marshal(Bitmap.new, file_name)的时候,
会发现无法dump。其实Bitmap来说61已经做了,但是不能连里面的font类都保存,所以这里提供一些Marshal。
同时欢迎有兴趣的同学也来写写吧...
目前没有XP版本的原因是我不知道XP的那些类的属性= =,有人想要才弄...
目录
(目前收录量:3)
Font的Marshal 本楼
Bitmap的Marshal(包括里面的Font)
沙发
Viewport的Marshal
4楼
Font的Marshal
#==============================================================================
# ■ Font的Marshal by 一箭烂
#==============================================================================
class Font
#--------------------------------------------------------------------------
# ● 存放
#--------------------------------------------------------------------------
def marshal_dump
[self.name, self.size, self.bold, self.italic, self.shadow, self.color]
end
#--------------------------------------------------------------------------
# ● 读取
#--------------------------------------------------------------------------
def marshal_load(obj)
initialize
self.name, self.size, self.bold, self.italic, self.shadow, self.color = obj
end
end
复制代码
对应的测试脚本:
a = Font.new
a.size = 33
b = File.open("b.txt", "wb")
Marshal.dump(a, b)
b.close
b = File.open("b.txt", "rb")
p Marshal.load(b).size
b.close
复制代码
作者:
一箭烂YiJL
时间:
2011-5-7 14:55
良性连帖,请勿扣分
Bitmap的Marshal(包括里面的Font)
特色只是可以连Bitmap的font都可以一起Marshal。
#==============================================================================
# ■ Bitmap的Marshal by 柳之一(原创) + 一箭烂(添加 dump Font类)
#==============================================================================
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)
font = Marshal.dump(self.font)
data = Zlib::Deflate.deflate(data)
[data.size, width, height, data, font].pack("LLLa#{data.size}a*")
end
#--------------------------------------------------------------------------
# ● 读取
#--------------------------------------------------------------------------
def self._load(obj)
size, w, h, zdata, font = obj.unpack("LLLa#{obj.unpack("L")}a*")
b = self.new(w, h)
RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
b.font = Marshal.load(font)
return b
end
#--------------------------------------------------------------------------
# ● Bitmap地址
#--------------------------------------------------------------------------
# [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
def address
buffer, ad = "rgba", 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
复制代码
作者:
wwqrw
时间:
2011-5-7 15:01
进来顶一下楼主的~
作者:
一箭烂YiJL
时间:
2011-5-7 15:06
本帖最后由 一箭烂YiJL 于 2011-5-7 15:08 编辑
有连帖垫,可以安心连帖咯= =
Viewport的Marshal
有关flash(color, duration)这个函数的参数就应该无法储存,其实他们有变量名字么?
#==============================================================================
# ■ Viewport的Marshal by 一箭烂
#==============================================================================
class Viewport
#--------------------------------------------------------------------------
# ● 存放
#--------------------------------------------------------------------------
def marshal_dump
[self.rect, self.visible, self.z, self.ox, self.oy, self.color, self.tone]
end
#--------------------------------------------------------------------------
# ● 读取
#--------------------------------------------------------------------------
def marshal_load(obj)
rect = obj[0]
initialize(rect)
self.rect, self.visible, self.z, self.ox, self.oy, self.color, self.tone = obj
end
end
复制代码
作者:
summer92
时间:
2011-5-7 21:52
Font能Marshal也就是说,不用安装字体了? 很多繁体游戏很悲剧
作者:
一箭烂YiJL
时间:
2011-5-7 23:11
我想这些东西都没什么人用的了,
于是决定其余的不写了,稍微有脚本常识的人就会知道怎么改来用的了。
作者:
灼眼的夏娜
时间:
2011-5-25 13:50
不错.. 推荐一个具体的应用:
http://rpg.blue/thread-118882-1-1.html
(被PIA走~
作者:
一箭烂YiJL
时间:
2011-5-25 16:54
灼眼的夏娜 发表于 2011-5-25 13:50
不错.. 推荐一个具体的应用:http://rpg.blue/thread-118882-1-1.html (被PIA走~
惊见夏娜大人...
发现那个帖子里面已经有这个讲解了...
但是类一旦继承后就可能储存成员不足,甚至是初始化错误。(当然想偷懒不重定义函数啦~~~)
可以拿到全部成员变量 instance_variables ? 但是 initialize 的参数就不知怎办了...
作者:
一瞬间的幻觉
时间:
2011-6-6 05:32
我猜我三年之内都用不到这些脚本的
谢谢剑兰童鞋分享!希望能写出更多更好的作品
作者:
574656549
时间:
2012-3-13 12:33
提示:
作者被禁止或删除 内容自动屏蔽
作者:
hanying1703
时间:
2013-3-2 17:59
求问如何利用这个,把变量角色信息储存到文件中
@一箭烂YiJL
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1