赞 | 115 |
VIP | 0 |
好人卡 | 0 |
积分 | 272 |
经验 | 0 |
最后登录 | 2024-5-12 |
在线时间 | 1323 小时 |
Lv5.捕梦者
- 梦石
- 16
- 星屑
- 11223
- 在线时间
- 1323 小时
- 注册时间
- 2020-3-21
- 帖子
- 357
|
本帖最后由 仇九 于 2021-5-9 18:50 编辑
在已经将565行改了的前提下,解决这又一个问题的最简单的办法是将第246行的bitmap.clear();这一条删去或者注释掉。
原因是缓存:
Sprite_Popup.prototype.drawBackRect这个函数是用来绘制图片/背景颜色的,当背景是图片且第一次读取这张图片时,背景图片被载入此函数下的临时变量bitmap里。
mv/mz在读取图片时,也会将这张图片作为缓存储存在ImageManager._imageCache里,这样做是为了下一次读取时直接读取缓存,不再读取源文件,增加重复读取时的效率。
但是在完成所需操作后,函数里执行了bitmap.clear(),这一条指令的作用是将图片清除掉,以节省一些空间。
但这个指令是直接对bitmap操作的,ImageManager._imageCache下此图片的缓存也会被clear掉,这样的话,这张图片的缓存就是空白了。
当第二次读取这张图片时,检测到之前读取过这张图片,所以直接调用了ImageManager._imageCache下这张图片的缓存,但是它已经是空白的了,所以第二次及之后读取时就都读取是一张空白图片了。
这里的问题就在于bitmap与ImageManager._imageCache下此图片的缓存指向的是一个内存地址,所以不能直接clear,一个方法就是直接删掉,毕竟第247行的bitmap = null也已经同步删除了bitmap及缓存,所以这一步是没有意义的。
我的想法:
不过想想删掉缓存也不是个好主意,所以同时把247行的bitmap = null也删去比较好,这样既能保留缓存加快第二次读取速度,bitmap这个指向图片对象的地址的临时变量也会在函数执行完后自动被删掉。
我想,写上clear是一种比较好的习惯吧,但是这里直接clear不合适。
其他:
这些是自学的,所以要是有些地方说错了希望有大佬指正。 |
评分
-
查看全部评分
|