我正在爲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的工作版本和很大部分喜歡它,但我需要知道的是:「是保證使用方法有兩個總是緩存給定的圖像瀏覽器?」還是我不能依賴的東西?是否有某些配置可以關閉自動緩存? (這甚至有可能嗎?)。你有沒有其他方法你認爲更好?非常感謝您的時間!
aah謝謝你,增加清晰度,我懷疑同樣的事情,但不想只是採取瘋狂的猜測,並可能在後來承受後果。 – 2012-05-05 03:54:01