返回列表 发新帖

babylonjs教程(28)-在IndexedDB中缓存资源

[复制链接]

138

主题

171

帖子

2564

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2564
发表于 2016-6-22 22:19:01 | 显示全部楼层 | 阅读模式
目录

  • 用法
  • 例子

在Babylon.JS1.4版本开始,你可以非常轻松的表明你想缓存于场景/游戏关联的资源到浏览器本地indexedDB中。这可以增强游戏体验,因为JSON和纹理文件可以直接从本地数据库加载而不是从网络中。

用法

为了提供离线支持,你要做的第一件事情就是创建.manifest文件关联你的场景。它应该被命名为NameOfYourScene.babylon.manifest。

注意:默认情况下,Babylon引擎被配置使用在线的资源。所以如果你不提供任何.manifest文件,我们假设你总是想直接从网络加载资源。

.manifest文件里面,插入下面这段JSON:
  1. {
  2.   "version" : 1,
  3.   "enableSceneOffline" : true,
  4.   "enableTexturesOffline" : true
  5. }
复制代码

当你使用Babylon引擎加载场景时,第一件事情中它会尝试加载manifest文件并检查JSON的描述。如果没有发现(404),那么会直接从web加载资源。如果找到了,它会加载这些值。然后你可以在任何时候改变这些值,然后会在每次加载场景校验。

你有三个参数需要填充:

  • 第一个是version,必须是整数。它知识你资源的当前版本号。如果你改变了它,Babylon引擎会在下次加载场景的时候检测变化。这会强制完整加载,并更新资源到浏览器数据库。这个是非常有用的如果你想确保浏览器客户端是最新的纹理或者最近放到服务器上的场景描述。
  • 第二个参数是enableSceneOffline,逻辑值类型。如果设置为true,将会加载与场景关联的JSON(这个文件的扩展名是.babylon)并将它存储到用户的本地数据库。下次用户加载游戏的时候,场景描述会直接从DB加载而不是从web服务器。
  • 第三个参数是enableTexturesOffline,也是逻辑值。这次,Babylon引擎会加载所以纹理资源(PNG或者JPG文件)并存储它们到用户本地数据库。因此,纹理将会直接从数据库读取而不是服务器。
注意:图片加载使用XHR2用blob格式。只有IE11和火狐支持存储blob数据到IndexedDB。chrome也不支持。这就是为什么,即使你设置了“enableTexturesOffline” 为true,Chrome也会尝试从网络加载纹理。Chrome用户至少受益于从DB中加载场景文件。

场景之一被配置为只缓存纹理。它是“The Car”场景。因为JSON文件,TheCar.babylon,大于93MB。IE11和chrome不能存储这么大的文件到DB。我决定,避免尝试这样的缓存。

例子

大多数我们网站的例子被配置使用离线的场景和纹理:http://www.babylonjs.com/。例如,你可以尝试Espilit场景。这个场景的描述文件是espilit.babylon关联的清单文件是:espilit.babylon.manifest。

回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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