制作HTML5 AssetLoader,浏览器是否总是缓存图片?
我正在为HTML5中的一个简单的面向对象游戏引擎构建资产加载器。现在我知道了制作资产加载器的两种方法(下面总结),我更喜欢第二种方法。我的问题是,保证所有浏览器始终都能正常工作的第二种方式?制作HTML5 AssetLoader,浏览器是否总是缓存图片?
为清楚:
- 类的有问题的名字是AssetLoader,
- 加载所有资产的方法被称为loadAssets(),
- 主类是游戏,
- 主游戏循环是runGameloop()。
方法1
创建AssetLoader的实例,将在整个游戏中持续。当loadAssets()在游戏开始时被调用时,它将创建一个字典,该字典在玩游戏时间期间保存所有资产的键/值对。
当一个精灵需要一个图像时,它会用一个给定的名字(例如“Archer”)来查询AssetLoader,并且该实例将返回适合该精灵使用的图像。
方法2
创建AssetLoader的实例,将不持续整个游戏(它会被调用一次,而不是分配给任何实例变量)。
实例的责任是查询服务器上的每个资产,这将导致浏览器缓存资产;很像:
function AssetLoader()
{
...
self.loadAssets = function(runGameloop)
{
self.tempImage = new Image();
$(self.tempImage).load(function()
{
self.assetsLoadedSoFar += 1;
if(self.assetsLoadedSoFar === self.totalAssets)
{
self.runGameloop();
}
});
self.tempImage.src = "assets/sprites/archer/archerSpriteSheet.png";
}
...
}
现在只要一个精灵需要的图像,该图像现在应该在浏览器缓存,它只是用新的图片()对象加载它,而无需通过AssetLoader去。
为什么我喜欢的方式2
1)我想避免引入抽象的不必要的层到发动机,我不希望要经过AssetLoader每次我要加载的资产。
2.)如果我在游戏中有很多资产,我不希望它们全部同时加载到AssetLoader的单个实例中。也许有人可以纠正我,但不会一次加载所有这些资源不必要地使游戏变得紧张?
所以现在我有方法2 here的工作版本和很大部分喜欢它,但我需要知道的是:“是保证使用方法有两个总是缓存给定的图像浏览器?”还是我不能依赖的东西?是否有某些配置可以关闭自动缓存? (这甚至有可能吗?)。你有没有其他方法你认为更好?非常感谢您的时间!
我不认为你可以依靠浏览器缓存。可以禁用自动缓存,我想这对于人们来说是相当普遍的。
我正是这种做,在过去的原因有两个:
由家庭共享一台计算机上- 低的磁盘空间(多个独立账户)
- 开发时,为了确保页面刷新时总是可以看到最新更改
此外,Chrome/Firefox的隐身/隐私浏览模式中禁用缓存。
aah谢谢你,增加清晰度,我怀疑同样的事情,但不想只是采取疯狂的猜测,并可能在后来承受后果。 – 2012-05-05 03:54:01