资源缓存 微信开放文档哈希游戏
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
,那么文件会下载到用户文件目录,否则下载到临时文件目录。用户文件目录里的资源文件,就是资源缓存。
对资源文件的缓存行为是资源加载模块内部控制和调度的,开发者无须关心。以如上代码为例,在gameTexture/zombie.spriteframe加载完成后,相应的资源文件就已缓存到了用户文件目录。
是小游戏用户文件目录的根目录,${wx.env.USER_DATA_PATH}/engine-cache是资源缓存的根目录,所有的缓存文件都在这个目录下。
缓存文件的文件名按照${资源组名}@${资源文件名}的格式保存和读取。@字符是分割资源组名和资源文件名的分割符,因此文件名中不应该包含@字符,否则会导致缓存模块报错。
如果资源文件名中必须包含@字符,可以换一个分割符。但这一步必须在t() 之前设置。
除了资源缓存,游戏可能也需要在用户文件目录写入一些业务文件,比如玩家的离线存档。所以用户文件目录不能被资源文件写满。 可以通过设置 CacheManager.sizeLimit 来限制缓存大小。
sizeLimit 只是一个 JS 层限制缓存文件写入的属性值,无法影响小游戏用户文件目录大小上限的设置。即使 sizeLimit 设置为500*1024*1024,还是会在文件总大小超过 200 MB 时写入失败。
资源组名也是资源组 id,id 末尾是 8 位 hash。当资源组内的文件内容发生变化,末尾的 hash 也会改变。 hash 不同的新旧版本资源组,会被视为两个不同的资源组。旧版本的资源会因为没有被使用,在淘汰过程中被删除。
当有新缓存写入且当前缓存空间不足时,会触发缓存淘汰。缓存空间不足包含两种情况:
当缓存空间不足时,缓存模块会调用暴露给游戏业务侧的回调函数 onNeedRelease()。游戏业务侧返回一个数值表示要释放的缓存空间大小。
如果不设置 engine.cache.onNeedRelease,那么要淘汰的缓存大小就是新写入的缓存的大小。
如要写入的缓存文件是 5 MB,那么就释放 = 5MB 的缓存空间。
除了基本的 LRU 以外,游戏业务侧还希望自定义淘汰策略。因此缓存模块暴露 compare 函数。compare 的用法和Array.prototype.sort一样,排序后得到一个权重升序的资源缓存数组。缓存模块从数组头部开始依次淘汰,直到满足要腾出的空间大小。
在 compare 函数的参数里,暴露了每个缓存的资源组在本次游戏中的加载信息,游戏业务侧可以据此定制加载策略。
资源文件被加载的次数(调用 engine.loader.load() 加载资源时涉及到这个资源文件的次数)
最近一次资源文件被加载的时间戳(调用 engine.loader.load() 加载资源时涉及到这个资源文件的时间戳)
资源文件被用到的次数(调用 engine.loader.getAsset() 且用到这个资源文件的内容的次数)
最近一次资源文件被用到的时间戳(最近一次调用 engine.loader.getAsset() 且用到这个资源文件的内容的时间戳)