2012-04-07 46 views
3

我正在爲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的工作版本和很大部分喜歡它,但我需要知道的是:「是保證使用方法有兩個總是緩存給定的圖像瀏覽器?」還是我不能依賴的東西?是否有某些配置可以關閉自動緩存? (這甚至有可能嗎?)。你有沒有其他方法你認爲更好?非常感謝您的時間!

回答

2

我不認爲你可以依靠瀏覽器緩存。可以禁用自動緩存,我想這對於人們來說是相當普遍的。

我正是這種做,在過去的原因有兩個:

由家庭共享一臺計算機上
  1. 低的磁盤空間(多個獨立賬戶)
  2. 開發時,爲了確保頁面刷新時總是可以看到最新更改

此外,Chrome/Firefox的隱身/隱私瀏覽模式中禁用緩存。

+0

aah謝謝你,增加清晰度,我懷疑同樣的事情,但不想只是採取瘋狂的猜測,並可能在後來承受後果。 – 2012-05-05 03:54:01