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

Project1

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

[原创发布] 快速存储Bitmap的Marshal(高难度API,不解释)

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

跳转到指定楼层
1
发表于 2008-5-27 00:31:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
vx xp均可以使用
object_id * 2 + 16 这个是关键中的关键。详细的部分请调查ruby的资源的rb_obj_id和DATA_PTR这个部分。

io形式等等按照自己的需求来自己设定
  1. class Font
  2. def marshal_dump;end
  3. def marshal_load(obj);end
  4. end
  5. class Bitmap
  6. # 传送到内存的API函数
  7. RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  8. RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  9. def _dump(limit)
  10. data = "rgba" * width * height
  11. RtlMoveMemory_pi.call(data, address, data.length)
  12. [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  13. end
  14. def self._load(str)
  15. w, h, zdata = str.unpack("LLa*"); b = new(w, h)
  16. RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4); b
  17. end
  18. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  19. #
  20. def address
  21. buffer, ad = "xxxx", object_id * 2 + 16
  22. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
  23. RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
  24. RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
  25. end
  26. end
复制代码
注意,这个脚本对于增强你的游戏性没有什么帮助,是关于如何储存图片的。
能打算使用这个的也是不需要范例的,要范例的估计也用不到。

不知道能不能解决 沉影不器 的 求把缓存里的bitmap压入存档的有效率的办法。如果不是的话,请原谅在下。
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
159 小时
注册时间
2008-5-27
帖子
190
2
发表于 2008-5-27 04:27:01 | 只看该作者
沉了,好东西帮你顶下。
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

3
 楼主| 发表于 2008-5-27 04:46:45 | 只看该作者
以下引用Elegance于2008-5-26 20:27:01的发言:

沉了,好东西帮你顶下。

谢谢你,本来准备pm他的,谁知pm不了
系统信息:本贴由本区版主认可,66RPG感谢您的热情解答~
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

4
发表于 2008-5-27 04:55:11 | 只看该作者
好有份量的一个脚本{/fd}
我也用RtlMoveMemory,因为美兽的二进制思路...可是劈头盖脸保存成数组之后就不知怎么办了

对rm的兴趣还没到下载ruby的份上,果然object_id很有用...
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

5
发表于 2008-5-27 05:02:54 | 只看该作者
{/qiang}{/qiang}
效率很可观!完全在应用级了!
544*416的图,在我这么旧的电脑上也只要300mm,换做逐点扫描可能在1500mm以上!
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

6
 楼主| 发表于 2008-5-27 05:05:07 | 只看该作者
对你有用就好。哎,我竟发这样非大众化的脚本,哪怕只有你一个知音,就满足了。
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
93 小时
注册时间
2008-5-16
帖子
745
7
发表于 2008-5-27 05:06:01 | 只看该作者
那沉影你的VX新菜单截图是不是有点卡,可以更新换上效率好的?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

8
发表于 2008-5-27 05:14:51 | 只看该作者
以下引用★_茄孓于2008-5-26 21:06:01的发言:

那沉影你的VX新菜单截图是不是有点卡,可以更新换上效率好的?

正是这个...因为原输出太慢只能限制图片大小,现在全屏似乎也没问题
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1035
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

9
发表于 2008-5-27 06:17:34 | 只看该作者
{/fd},這個東西好有用啊。柳一兄眞厲害


添加一下語句解釋:
=begin

RtlMoveMemory(API 函數)
  說明:將指定之記憶體範圍移動到新的位置
       (對於內存進行讀取或修改)
  參數說明:p -想要移動的內容(字符串)
            i -移動的地址(整數)
            i -複製的字節數(整數)
  返回值  :沒有查到(毆~)

Zlib::Inflate.inflate( ) (壓縮方法)
  作用:把整數壓縮成字符串
  說明:把整數寫( )之內就可以了
Zlib::Deflate.deflate( ) (壓縮方法)
  作用:與上面相反
  
"rgba" * width * height  (String 類方法)
  作用:擴展字符串
  說明:看以下例子
        "abc" * 2 #=>"abcabc"
      
new(w, h)    (Bitmap 類方法)
  作用:生成指定尺寸的 Bitmap 對象
  說明:常用形式爲 Bitmap.new(width, height)
        因爲這裏是 class Bitmap 內部調用,所以可以簡化爲 new(width, height)

string.unpack() (String 類方法)
  作用:.unpack 會有把一個字符串轉換爲數組(Array)
  說明:.unpack( )需要帶有參數說明轉換的方法
         (LLa*)代表把字符轉換爲以下樣式的數組:
  array=[
         unsigned native long integer(整數),
         unsigned native long integer(整數),
         string(字符串),
         ]
         最後的 * 表示會使用完字符串當中所有的元素

array.pack()    (Array 類方法)
  作用:把數組(Array)轉換爲字符串(String)
  參數說明參考 .unpack

* .pack() 與 .unpack() 的作用是實現數組(Array)與字符串(String)的互相轉換
  
buffer, ad = "xxxx", object_id * 2 + 16 (賦值方法)
  作用:同時賦值兩個變量
  說明:Ruby 語句允許同時給多個變量賦值
        左邊的「變量」會取得右邊相應位置的「數值」
        使用時格式應該爲:
        a , b, c = avalue, bvalue, cvalue
  注意:= 號的左右兩邊元素量可以不等
        如果「值」數量多於「變量」數量會忽略多餘值
        如果「變量」數量多於「值」數量,多餘的「變量」會有得到「nil」值
        如果左邊只有一個「變量」而右邊多於一個「值」會賦成爲數組
=end

具體怎麼用不知道 (毆)
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

10
发表于 2008-5-27 14:06:15 | 只看该作者
這個只加150分太少了
禾西轉到VX區讓我來發布吧{/dy}
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-21 22:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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