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

Project1

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

[交流讨论] 关于Cache模块,是否需要手动释放?

[复制链接]

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
跳转到指定楼层
1
发表于 2017-7-16 11:57:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 jhhuang 于 2017-7-25 22:09 编辑

今天在看Window_Base类时发现一个奇葩的问题。脚本如下:

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 绘制图标
  3.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  4.   #--------------------------------------------------------------------------
  5.   def draw_icon(icon_index, x, y, enabled = true)
  6.     bitmap = Cache.system("Iconset")
  7.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  8.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 绘制角色肖像图
  12.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  13.   #--------------------------------------------------------------------------
  14.   def draw_face(face_name, face_index, x, y, enabled = true)
  15.     bitmap = Cache.face(face_name)
  16.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  17.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  18.     bitmap.dispose
  19.   end


默认脚本在绘制角色肖像图,描绘完毕后会释放bitmap。但是在绘制图标时,却不释放。

那是不是代表,我们平时用Cache建立的所有图像,都没有必要释放?

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21636
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

2
发表于 2017-7-16 12:14:52 | 只看该作者
本帖最后由 喵呜喵5 于 2017-7-16 12:17 编辑

感觉到卡顿影响性能时才释放

我一直觉得描绘脸图后释放bitmap是rgss3不同人合作写代码写出的bug……

附上早先的讨论帖:
https://rpg.blue/forum.php?mod=v ... d=374690&extra=

点评

M5大大晚安,我好像也遇到同样问题了...https://rpg.blue/thread-483161-1-1.html...请问是不是把Window_Base的def draw_face(...)中,那句bitmap.dispose注释掉就行了??  发表于 2020-9-3 18:03

评分

参与人数 1星屑 +60 收起 理由
jhhuang + 60 孔子你好,孔子再见。

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
19433
在线时间
3102 小时
注册时间
2013-1-11
帖子
1291
3
发表于 2017-7-16 12:19:21 | 只看该作者
本帖最后由 张咚咚 于 2017-7-16 12:23 编辑

RUBY 代码复制
  1. module Cache
  2.   def self.first_load(path)
  3.     return unless path
  4.     @Cache = {} if @cache == nil
  5.     @cache[path] = Bitmap.new(path)
  6.   #rescue RGSSError
  7.      #msgbox "出现异常,释放所有图片可继续"
  8.      #Cache.clear
  9.    end
  10. end


我刚试了一下,读取一个图片10万次,会发现抛出一个异常
我觉得应该是内存满了什么的,一般情况下是占不满的我觉得,如果图片量过大
可以把那三行注释去掉,发现异常后自动释放所有图片
0.upto(100000){|i|
Cache.first_load("Graphics/Pictures/filename")
}

点评

一般情况下占不满,但偶尔会出现极端情况,比如某个外国人写的文字渐变脚本会把文字渐变bitmap保存到缓存中,用到中文游戏里字多时会崩……  发表于 2017-7-16 13:48

评分

参与人数 1星屑 +60 收起 理由
jhhuang + 60 问题已解答,谢谢各位。

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 15:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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