您的位置:主页 > 高级技能 > >

深入基于浏览器的游戏中的资产包装

时间:2019-06-14 12:12 编辑:Xbox O 来源:http://www.bdzf.org
[在此重印的#altdevblogaday深度片段中,软件开发人员Rob Ashton分享了他在基于浏览器的游戏中获取资产包装的一些有用提示。]

我已经在基于网络的游戏中写了几篇关于资产管理的帖子,我仍然认为它们对于它们中的大多数要点都是有效和有用的。

然而,在整理我的最新努力(HTML5画布中的hack-n-slash等距多人RPG游戏)时,我学到了更多东西,并想分享它们。

TLDR;我已将我正在使用的代推送到Github,可以在这里找到:https://github.com/robashton/swallow

无论如何?继续前进,我们可以发现其中的一些知识:

只需等待启动时通过HTTP加载请求的资产就不够了

在我之前的帖子中,我建议如果你有一个资源管理员,你需要资源,如纹理,声音,模型,着色器等,那么它可以负责加载数据并返回promises而不是真实的东西。这看起来像这样:
 var modelOne = 
?resources.find('models / hovercraft.json');
var modelTwo =
?resources.find('models / missile.json');
var explosionSound = resources.find('sounds / explosion.wav');
?
resources.on('fullyLoaded',function(){
game.start();
?
//使用资源
modelOne.get();
modelTwo.get();
}); 世界是一个幸福的居住地,我们依靠通过HTTP传递的资产,依赖HTTP缓存以及给予我们的其他一切,并且效果很好。

但是,我们还依赖游戏的初始状态来指示它将需要哪些资源?并且不考虑游戏开始后可能要求的其他资源(例如,爆炸,世界其他模型/纹理,声音等)。

这会导致像'弹出'这样的负面瑕疵,或者在特效结束后播放的声音(或者在不好的情况下,玩家在空白的背景上行走!)

因此答案是预加载,但如何?

应用程序缓存

现在,我不打算给出完整的描述,但基本上你可以告诉浏览器“嘿,这些是我的资源,请下载并缓存它们”,例如:
 CACHE MANIFEST 
#2012-03-11:v1
?
CACHE:
/favicon.ico
game.html
models / hovercraft.json
models / missile.json
sounds / explosion.wav 我们可以通过枚举资产自动生成这种应用程序缓存作为部署过程的一部分,如果没有任何文件发生更改,我们可以选择不重新生成它。 />
当我们重新生成它时,我们可以设置时间戳(因此向浏览器指示,因为清单已经更改,它可能想要通过服务器上的那些资产并查看它需要下载哪些资产)。

我们也有类似的代来反对这一点,“必要时更新资源,等待这个过程完成”
 appCache.addEventListener('updateready',function(){
game.start();
},false); Ace。

这有一些问题吗?最大的可能是它不能真正允许你的应用程序中的任何粒度。

在这个互联网的现代时代,我们的用户注意力短暂,长时间的初始负载可能意味着失去用户?例如,如果您有不同的级别,您可能希望在播放该级别之前下载该级别的每个级别和资产?不是整场比赛的开始。

简而言之,如果您拥有一个小型自包含游戏(例如益智游戏),或者您希望完全支持可在下载后立即离线播放的游戏,则应用程序缓存非常棒;然而,它确实存在一些问题。

这带给我们另一种选择

编写自己的应用程序缓



我们可以通过编写自己的清单定义并使用它来从服务器预加载文件,轻松模拟AppCache为我们做的事情。然后我们可以依赖浏览器缓存以它一直以来的方式继续工作(所以如果文件没有改变,不要提取它们等等。)

这基本上就像我们的第一个解决方案,除了我们现在有清单文件,描述需要预加载的数据。
< [在此重印的#altdevblogaday深度片段中,软件开发人员Rob Ashton分享了他在基于浏览器的游戏中获取资产包装的一些有用提示。]

我已经在基于网络的游戏中写了几篇关于资产管理的帖子,我仍然认为它们对于它们中的大多数要点都是有效和有用的。

然而,在整理我的最新努力(HTML5画布中的hack-n-slash等距多人RPG游戏)时,我学到了更多东西,并想分享它们。

TLDR;我已将我正在使用的代推送到Github,可以在这里找到:https://github.com/robashton/swallow

无论如何?继续前进,我们可以发现其中的一些知识:

只需等待启动时通过HTTP加载请求的资产就不够了

在我之前的帖子中,我建议如果你有一个资源管理员,你需要资源,如纹理,声音,模型,着色器等,那么它可以负责加载数据并返回promises而不是真实的东西。这看起来像这样:
 var modelOne = 
?resources.find('models / hovercraft.json');
var modelTwo =
?resources.find('models / missile.json');
var explosionSound = resources.find('sounds / explosion.wav');
?
resources.on('fullyLoaded',function(){
game.start();
?
//使用资源
modelOne.get();
modelTwo.get();
}); 世界是一个幸福的居住地,我们依靠通过HTTP传递的资产,依赖HTTP缓存以及给予我们的其他一切,并且效果很好。

但是,我们还依赖游戏的初始状态来指示它将需要哪些资源?并且不考虑游戏开始后可能要求的其他资源(例如,爆炸,世界其他模型/纹理,声音等)。

这会导致像'弹出'这样的负面瑕疵,或者在特效结束后播放的声音(或者在不好的情况下,玩家在空白的背景上行走!)

因此答案是预加载,但如何?

应用程序缓存

现在,我不打算给出完整的描述,但基本上你可以告诉浏览器“嘿,这些是我的资源,请下载并缓存它们”,例如:
 CACHE MANIFEST 
#2012-03-11:v1
?
CACHE:
/favicon.ico
game.html
models / hovercraft.json
models / missile.json
sounds / explosion.wav 我们可以通过枚举资产自动生成这种应用程序缓存作为部署过程的一部分,如果没有任何文件发生更改,我们可以选择不重新生成它。 />
当我们重新生成它时,我们可以设置时间戳(因此向浏览器指示,因为清单已经更改,它可能想要通过服务器上的那些资产并查看它需要下载哪些资产)。

我们也有类似的代来反对这一点,“必要时更新资源,等待这个过程完成”
 appCache.addEventListener('updateready',function(){
game.start();
},false); Ace。

这有一些问题吗?最大的可能是它不能真正允许你的应用程序中的任何粒度。

在这个互联网的现代时代,我们的用户注意力短暂,长时间的初始负载可能意味着失去用户?例如,如果您有不同的级别,您

可能希望在播放该级别之前下载该级别的每个级别和资产?不是整场比赛的开始。

简而言之,如果您拥有一个小型自包含游戏(例如益智游戏),或者您希望完全支持可在下载后立即离线播放的游戏,则应用程序缓存非常棒;然而,它确实存在一些问题。

这带给我们另一种选择

编写自己的应用程序缓存

我们可以通过编写自己的清单定义并使用它来从服务器预加载文件,轻松模拟AppCache为我们做的事情。然后我们可以依赖浏览器缓存以它一直以来的方式继续工作(所以如果文件没有改变,不要提取它们等等。)

这基本上就像我们的第一个解决方案,除了我们现在有清单文件,描述需要预加载的数据。
<
相关内容:
上一篇:Battlefield Bad Company 2在排名前十 下一篇:Climax招募Eneroth来运营伦敦工作室