日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

走在网页游戏开发的路上(十)

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 走在网页游戏开发的路上(十) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頁游資源管理

現在頁游的規模越來越來大,游戲內容豐富,資源管理變得很重要。現在一款SNS頁游的所有資源可達50MMMO頁游更高達幾百M,不可能把資源放到一個文件里面、也不可能一次性加載完所有資源。按200kb/s的下載速度來算,50M的資源需要4+分鐘,這是絕對不能忍受的事情(更何況大部分人網速比這慢)。

頁游資源通常有以下幾種格式:圖片(jpg、png等)、xml(配置文件)、swf資源、聲音文件。通常有以下手段來管理資源,并解決進入游戲慢的問題:

l 配置文件壓縮打包

l 資源細化分離,按需加載

l 模塊化編程,按模塊加載

l 資源緩存

l 資源預加載

l 使用CDN部署資源

1. 配置文件壓縮

頁游需要10幾,20幾個配置文件這是很常見的,配置文件現在流行使用xml格式??梢酝ㄟ^壓縮軟件打包,flash通過二進制方式加載壓縮包之后解壓使用。這樣一方面減少連接請求數;另一方減少了流量。

2. 資源細化分離,按需加載

分離各類模塊和素材(圖片、swf文件),方便實現按需加載。整個游戲的資源size很大,但是進入游戲往往并不需要所有的資源。這樣我們可以分離各類模塊和素材,所有資源通過配置文件管理。整理出進入游戲需要的必加載資源,剩余資源只在需要的時候再加載,以減少進入游戲的時間。分離各類模塊和素材,還要一個好處就是減少單個資源的size,降低資源下載失敗的情況

按需加載的流程如下:

l 判斷資源是否可用(是否已經加載過);

l 如果已經加載,直接使用即可;

l 否則加載資源,下載完成后才使用。

這里有點需要注意 如何判斷一個資源是否已經加載過?一般加載過的資源,我們會緩存在內存中(這樣下次使用資源無需再次加載),加載過的資源使用一個Dictionary管理(以資源urlkey,資源內容為值。注意不用使用數組保存資源,使用字典會比遍歷數組查找名稱快很多),通過資源url就可判斷資源是否已經加載過。或者通過applicationDomain.hasDefinition(className),查找資源中的鏈接類是否可以在應用程序域中找到,因為加載通常會制定一個應用程序域,加載過的資源可以直接從域中讀取。

我做過的幾個游戲進入游戲必加載資源必須盡量小,這樣可以保證玩家可以快速進入游戲,這也是一個硬性指標,按需加載是必須的!

3. 按模塊加載

模塊細化:按照程序邏輯,游戲可以拆分出多個模塊,如“登陸模塊”、“副本模塊”、“任務模塊”、”關系鏈模塊“等等;按照游戲中的關卡或場景,可以拆分出不同的“場景模塊”。這些模塊不是主程序運行必須的,只在需要的時候加載。

這點其實跟第二點“按需加載”是一樣的,這里更關注游戲如何進行模塊劃分使得程序可以按需加載。模塊劃分主要包括“核心模塊劃分”和“子模塊劃分”。核心模塊的劃分思路是這樣的:它們是游戲啟動所必須的,相互之間是緊密聯系的,還要經常的被子模塊調用;而相對的,子模塊的劃分思路是:他們在游戲啟動過程中不是必須的,可以在游戲過程中再加載,子模塊相互之間基本上完全沒有聯系,一個子模塊的增加和刪除不會影響到任何其他子模塊,子模塊可能需要調用主程序的接口或者獲得主程序的數據,但主程序絕對不應該依賴某個子模塊。

明確了模塊劃分思路再具體看看哪些部分應該劃分為核心模塊,哪些部分應該劃分為子模塊。一般情況下,核心模塊按照游戲啟動順序大致包括: 加載殼SWF 登錄注冊SWF 灰度控制文件 主程序SWF 配置文件包 公共素材包 UI需要的資源 。

注:

l 加載殼SWF一般很小(50K左右,小于100K),只包含2個功能:1)登錄注冊、灰度控制;2)加載主程序swf。加載完主程序swf,加載殼就完成自己的工作,主程序swf接管程序控制權。盡量最小化加載殼的功能,以保證調整或增加功能不用修改加載殼。

l 接入第三方平臺時,如騰訊,”登錄注冊SWF“不需要,統一使用頁面登錄框。

l 公共素材包,除了抽取的普通資源swf包,還可以是共享庫的形式:UI共享庫、Font字體共享庫。

l 把公告素材包、主UI需要的資源放在”注程序SWF“之后,否則需要把配置文件包、加載公共資源等工作放到加載殼中去做。如果其中使用到的公用類被修改、項目運營中頻繁運營造成修改配置文件和資源管理方式,加載殼就得重新編譯發布,違反了”最小化加載殼的功能“規則。

4. 資源緩存

Flash頁游可用的緩存有以下幾種形式:內存、瀏覽器緩存、ShareObject flash特有的)。游戲查找資源,通常按照:內存 ==> ShareObject / 瀏覽器緩存 ==> 服務器的順序檢查。緩存的使用可以給玩家非常好的體驗(只在第一次加載時耗時久),這樣整體游戲會感覺流暢,不會每次切換場景等都要等待從服務器加載資源的時間。

前面介紹過一般加載過的資源,我們會緩存在內存中(這樣下次使用資源無需再次加載),加載過的資源使用一個Dictionary管理。但是內存資源是有限且寶貴的,通常只駐留常用的資源。對于其他資源,這時ShareObject / 瀏覽器緩存就很有用,比從服務器拉取速度快、并且節省流量。

4.1. 瀏覽器緩存

關于瀏覽器緩存可以參考文章:瀏覽器緩存機制。(http://goo.gl/SaHt0

4.2. ShareObject

這里需要理解下為什么有了瀏覽器緩存,as3還搞個ShareObject雖然有瀏覽器緩存,但實際上這種緩存持續不了幾天,因為瀏覽器一向都有最大緩存限制。一般你看幾個視頻,這個緩存空間就消耗得差不多了。為了不讓Flash加載的文件緩存被沖洗掉,你可以將加載的文件的二進制數據(LoadercontentLoaderInfo.bytesURLLoader則要用二進制方式加載獲取其data屬性)保存在ShareObject里,并添加版本號以便更新,下次加載就直接取這個數據。這個操作會請求大量ShareObject空間,因此FLASH會彈出提示讓用戶確認(ShareObject默認是100K的大小,超過這個大小需要用戶確認)。如果你擔心用戶不確認,可以在游戲其他地方向用戶說明情況并要求他們點擊確認按鈕,現在已經有很多MMO頁游這么做了。

Shareobject示意

var so:SharedObject = SharedObject.getLocal("resName_v1");

if (so.size == 0)

{

// 共享對象不存在。

trace("created...");

so.data.res = bytes;

so.data.ver = “v1”;

}

trace("SharedObject is " + so.size + " bytes");

so.flush();

5. 資源預加載

空閑的時候,預加載核心資源;或者根據玩家特點預加載需要的資源。

l 根據玩家的操作,預判下一步要做的操作,預加載相應資源,這個要具體游戲具體分析。

l 幫核心玩家預加載所有核心資源。如核心QQ農場玩家同時會玩QQ牧場,并經常在這2個模塊之間切換,在玩家進入QQ農場空閑時預加載牧場的資源。

資源預加載技術上不難,關鍵是要找到合適的時間,加載對的資源。

6. 使用CDN加速

關于CDN-內容推送系統可以文考文章:CDN-內容推送系統http://goo.gl/H7Llw)。 現在我所在公司所有的頁游都使用CDN技術。CDN技術也在各大門戶網站實踐使用。

關于CDN加速頁游其實和加速網站差不多,參考方案:《網頁游戲加速解決方案交流》(百度文庫)。

你可能感興趣的還有:

ü 走在網頁游戲開發的路上(一)

ü 走在網頁游戲開發的路上(二)

ü 走在網頁游戲開發的路上(三)

ü 走在網頁游戲開發的路上(四)

ü 走在網頁游戲開發的路上(五)

ü 走在網頁游戲開發的路上(六)

ü 走在網頁游戲開發的路上(七)

ü 走在網頁游戲開發的路上(八)

ü 走在網頁游戲開發的路上(九)




本文轉自吳秦博客園博客,原文鏈接:http://www.cnblogs.com/skynet/archive/2012/12/20/2827236.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的走在网页游戏开发的路上(十)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。