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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: CCD0645
打印 上一主题 下一主题

[有事请教] 因PreloaderCore预加载而导致内存过载而闪退,如何补救。

[复制链接]

Lv5.捕梦者

梦石
0
星屑
33498
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

11
发表于 2020-7-26 19:36:33 | 只看该作者
本帖最后由 芯☆淡茹水 于 2020-7-26 19:38 编辑
CCD0645 发表于 2020-7-26 19:02
还有老板新版之分吗?我发帖的时间也是今年,而且MV是STEAM版的,应该会自动更新吧。
我刚才新建一个工程 ...


ImageManager 的那两个个人常常给搞混~!
虽然不知道你的预载插件是怎样的,但可以用一个笨办法,不用预载图片,让连续显示图片不闪图,但要求多张同步就可能有些办不到
把 Sprite_Picture 的一个方法改成下面这样就行了
  1. Sprite_Picture.prototype.loadBitmap = function() {
  2.     var bitmap = ImageManager.loadPicture(this._pictureName);
  3.     bitmap.addLoadListener(function(){
  4.         this.bitmap = new Bitmap(bitmap.width, bitmap.height);
  5.         this.bitmap.blt(bitmap,0,0,bitmap.width,bitmap.height,0,0);
  6.     }.bind(this));
  7. };
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
12
 楼主| 发表于 2020-7-26 20:22:15 | 只看该作者
芯☆淡茹水 发表于 2020-7-26 19:36
ImageManager 的那两个个人常常给搞混~!
虽然不知道你的预载插件是怎样的,但可以用一个笨办 ...

这个我已经有一个插件用于不闪图的,关键是同步必须要用预加载才行。
虽然预加载占内存很大。
有没有办法定期给游戏清一下内存,使其不至于内存爆炸而闪退?因为游戏运行越久,内存越占越多。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33498
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

13
发表于 2020-7-26 21:10:19 | 只看该作者
本帖最后由 芯☆淡茹水 于 2020-7-26 21:38 编辑
CCD0645 发表于 2020-7-26 20:22
这个我已经有一个插件用于不闪图的,关键是同步必须要用预加载才行。
虽然预加载占内存很大。
有没有办法 ...


定期?我不知道你的定期是什么时候。
ImageCache 有一个释放预载的功能,但他是根据 ID 来的。
可以把把下面的加入脚本
  1. ImageCache.prototype.releaseToBeginning = function(){
  2.     Object.keys(this._items).map(function(key){
  3.         if (this._items[key].reservationId !== ImageManager._systemReservationId) {
  4.           delete this._items[key];
  5.         }
  6.     }, this);
  7. };
  8. ImageManager.releaseToBeginning = function(){
  9.     this._imageCache.releaseToBeginning();
  10. };
复制代码

这是强制清除 除游戏开始时预载的系统图片以外 的所有缓存图片。
用法是 事件-脚本: ImageManager.releaseToBeginning();
什么时候清理你自己搞定,同样没有测试。

还有一种方案,把他的释放限制改一下,只承认 系统预载 的图片。
JAVASCRIPT 代码复制
  1. ImageCache.prototype._mustBeHeld = function(item){
  2.     return item.reservationId === ImageManager._systemReservationId;
  3. };


这个就只需要把上面代码写入脚本,这个不需要手动,达到最大限制时才自动释放到限制的范围内。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
14
 楼主| 发表于 2020-7-28 22:33:40 | 只看该作者
芯☆淡茹水 发表于 2020-7-26 21:10
定期?我不知道你的定期是什么时候。
ImageCache 有一个释放预载的功能,但他是根据 ID 来的。
可以把把 ...

感觉写上去没什么反应,你说这个ImageCache是额外需要加的一个插件吗?还是说自带的?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33498
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

15
发表于 2020-7-29 09:00:47 | 只看该作者
CCD0645 发表于 2020-7-28 22:33
感觉写上去没什么反应,你说这个ImageCache是额外需要加的一个插件吗?还是说自带的? ...

肯定是自带的啊,要不然你加上上面的代码就立马报错,或者致使整个插件代码无效。
ImageCache 是MV后来的版本才有的,是对图像数据的储存,管理,释放,,,等功能。
至于你说的看不到效果,个人就不知道实际是什么原因了,或者你可以把限制的改小一些,
默认的是这么多: ImageCache.limit = 10 * 1000 * 1000;
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 11:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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