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

Project1

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

[RMVX发布] Marshal拓展系列(文件dump/load)【3】

[复制链接]

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5704
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2011-5-7 14:50:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 一箭烂YiJL 于 2011-5-22 10:15 编辑


又是一堆不大众化的脚本,当我们用类似Marshal(Bitmap.new, file_name)的时候,
会发现无法dump。其实Bitmap来说61已经做了,但是不能连里面的font类都保存,所以这里提供一些Marshal。
同时欢迎有兴趣的同学也来写写吧...
目前没有XP版本的原因是我不知道XP的那些类的属性= =,有人想要才弄...


目录
(目前收录量:3)


Font的Marshal

  1. #==============================================================================
  2. # ■ Font的Marshal by 一箭烂
  3. #==============================================================================
  4. class Font
  5.   #--------------------------------------------------------------------------
  6.   # ● 存放
  7.   #--------------------------------------------------------------------------
  8.   def marshal_dump
  9.     [self.name, self.size, self.bold, self.italic, self.shadow, self.color]
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 读取
  13.   #--------------------------------------------------------------------------
  14.   def marshal_load(obj)
  15.     initialize
  16.     self.name, self.size, self.bold, self.italic, self.shadow, self.color = obj
  17.   end
  18. end
复制代码
对应的测试脚本:
  1. a = Font.new
  2. a.size = 33

  3. b = File.open("b.txt", "wb")
  4. Marshal.dump(a, b)
  5. b.close

  6. b = File.open("b.txt", "rb")
  7. p Marshal.load(b).size
  8. b.close
复制代码

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5704
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
2
 楼主| 发表于 2011-5-7 14:55:32 | 只看该作者
良性连帖,请勿扣分
Bitmap的Marshal(包括里面的Font)


特色只是可以连Bitmap的font都可以一起Marshal。
  1. #==============================================================================
  2. # ■ Bitmap的Marshal by 柳之一(原创) + 一箭烂(添加 dump Font类)
  3. #==============================================================================
  4. class Bitmap
  5.   #--------------------------------------------------------------------------
  6.   # ● 传送到内存的API函数
  7.   #--------------------------------------------------------------------------
  8.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  9.   RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  10.   #--------------------------------------------------------------------------
  11.   # ● 存放
  12.   #--------------------------------------------------------------------------
  13.   def _dump(limit)
  14.     data = "rgba" * width * height
  15.     RtlMoveMemory_pi.call(data, address, data.length)
  16.     font = Marshal.dump(self.font)
  17.     data = Zlib::Deflate.deflate(data)
  18.     [data.size, width, height, data, font].pack("LLLa#{data.size}a*")
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 读取
  22.   #--------------------------------------------------------------------------
  23.   def self._load(obj)
  24.     size, w, h, zdata, font = obj.unpack("LLLa#{obj.unpack("L")}a*")
  25.     b = self.new(w, h)
  26.     RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
  27.     b.font = Marshal.load(font)
  28.     return b
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● Bitmap地址
  32.   #--------------------------------------------------------------------------
  33. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  34.   def address
  35.     buffer, ad = "rgba", object_id * 2 + 16
  36.     RtlMoveMemory_pi.call(buffer, ad, 4)
  37.     ad = buffer.unpack("L")[0] + 8
  38.     RtlMoveMemory_pi.call(buffer, ad, 4)
  39.     ad = buffer.unpack("L")[0] + 16
  40.     RtlMoveMemory_pi.call(buffer, ad, 4)
  41.     return buffer.unpack("L")[0]
  42.   end
  43. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
140
在线时间
0 小时
注册时间
2011-5-7
帖子
4
3
发表于 2011-5-7 15:01:51 | 只看该作者
进来顶一下楼主的~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5704
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
4
 楼主| 发表于 2011-5-7 15:06:06 | 只看该作者
本帖最后由 一箭烂YiJL 于 2011-5-7 15:08 编辑

有连帖垫,可以安心连帖咯= =
Viewport的Marshal

有关flash(color, duration)这个函数的参数就应该无法储存,其实他们有变量名字么?
  1. #==============================================================================
  2. # ■ Viewport的Marshal   by 一箭烂
  3. #==============================================================================
  4. class Viewport
  5.   #--------------------------------------------------------------------------
  6.   # ● 存放
  7.   #--------------------------------------------------------------------------
  8.   def marshal_dump
  9.     [self.rect, self.visible, self.z, self.ox, self.oy, self.color, self.tone]
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 读取
  13.   #--------------------------------------------------------------------------
  14.   def marshal_load(obj)
  15.     rect = obj[0]
  16.     initialize(rect)
  17.     self.rect, self.visible, self.z, self.ox, self.oy, self.color, self.tone = obj
  18.   end
  19. end
复制代码

点评

你买了那个用户组当然就不用扣分了= =  发表于 2011-5-7 22:28
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1357
在线时间
677 小时
注册时间
2009-11-11
帖子
2790
5
发表于 2011-5-7 21:52:04 | 只看该作者
Font能Marshal也就是说,不用安装字体了? 很多繁体游戏很悲剧

点评

说错...应该是说TTF字体文件,什么名字也无所谓,总之使用的时候根据字形名称。  发表于 2011-5-9 16:35
就算没有该字体的人都能在VX中用这种字体。  发表于 2011-5-8 20:08
- -那么读取Font字体的意义是?  发表于 2011-5-8 12:05
这个只是dump和load一些RGSS对象而已。解决繁体的最好办法是将字体文件放入"Font\"下。  发表于 2011-5-7 23:04

嘿。嘿。嘿
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5704
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
6
 楼主| 发表于 2011-5-7 23:11:08 | 只看该作者
我想这些东西都没什么人用的了,
于是决定其余的不写了,稍微有脚本常识的人就会知道怎么改来用的了。

点评

哦,希望安装的时候直接在游戏开始就读取游戏内使用的字体,不用用户再手动安装,也是很方便的功能  发表于 2011-5-10 14:38
- -那也相当于 “解决繁体的最好办法是将字体文件放入"Font\"下” 这个操作了,你杂说不是~?  发表于 2011-5-9 11:31
- -那么读取Font字体的意义是?  发表于 2011-5-8 12:05
回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
7
发表于 2011-5-25 13:50:44 | 只看该作者
不错.. 推荐一个具体的应用:http://rpg.blue/thread-118882-1-1.html (被PIA走~
RMXP&RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5704
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
8
 楼主| 发表于 2011-5-25 16:54:36 | 只看该作者
灼眼的夏娜 发表于 2011-5-25 13:50
不错.. 推荐一个具体的应用:http://rpg.blue/thread-118882-1-1.html (被PIA走~

惊见夏娜大人...
发现那个帖子里面已经有这个讲解了...
但是类一旦继承后就可能储存成员不足,甚至是初始化错误。(当然想偷懒不重定义函数啦~~~)
可以拿到全部成员变量 instance_variables ? 但是 initialize 的参数就不知怎办了...

点评

instance_variabls是获取全部实例变量 初始化的参数只有 重载 保存下载了  发表于 2011-6-7 12:42
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

9
发表于 2011-6-6 05:32:18 | 只看该作者
我猜我三年之内都用不到这些脚本的

谢谢剑兰童鞋分享!希望能写出更多更好的作品
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
734
在线时间
919 小时
注册时间
2010-11-13
帖子
1023
10
发表于 2012-3-13 12:33:22 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-21 23:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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