Flash Web Game(MMORPG) 怎樣提高同屏人數?

今天面試的時候,面試官對我說他們的遊戲優化到同屏人數可以達到1000人!
遊戲還可以維持在25幀
這可能嗎?????


2013-10-14更新:加入一些限制條件,加入一些另外的方法。
====

這部分要從兩方面說:客戶端性能和服務端性能。

客戶端方面,即使不使用Stage3D,達到1000人同屏,並不算很難的事情。當然,這需要一些限制條件。下面是我所說的達到1000人同屏的遊戲(LH)的基本情況:

1. 人物層級相對簡單,分為坐騎層和人物層,沒有武器、裝備、服裝等其他分層;
2. 人物的運動和碰撞採用向量計算,沒有使用A*等演算法。

AS3的點陣圖性能相當高,使用BitmapData.draw的方式來重繪地圖,與使用顯示列表的方式相比,性能有天壤之別。這種方式本來就是傳統2D遊戲的製作方式。採用這種方式,遊戲運行非常流暢,但也有個小缺點(雖然我不認為這是缺點):由於無時無刻不在渲染,即使是人物不動的情況下,CPU也會保持較高的佔用率(我的是30%左右)。

上面提到的方式拋棄了顯示列表的靈活性,另外又考慮到可能有玩家會覺得CPU高了不爽,因此我採用的是一種混合的方式。大致是這樣的:

對於遊戲中的人物的動作,採用set Bitmap.bitmapdata的方式進行切換。而人物的移動、碰撞等等,依然採用傳統的顯示列表。

這樣處理方式的性能要比使用BitmapData.draw的方式差(主要是顯示列表的消耗),但好在可以使用顯示列表,在層級處理上比較方便。只要優化得當,性能也不是問題。

我在LH中採用了這種混合方式,測試過600人(花錢測試,都是真人)同屏在線的情況,畫面非常流暢,人物堆在一起,好像馬蜂窩。

還有兩個技術可以提高流暢程度:

1. 使用Workers把網路載入、圖像解析、尋路演算法和渲染功能分到不同的線程中;
2. 使用Stage3D渲染。

一張地圖很大,在實際的遊戲當中要1000人顯示在同一個地圖中的同一個屏幕(頁游大約也就1024X768),或許只在新手村中有可能出現。通過隱藏屏幕外的對象,可以進一步優化性能。另外通過合理的分服,也可以避免掉這種情況。

1000人同屏,我覺得服務端的問題可能要更大一些。就我的感覺,在對並發要求較高的遊戲中,性能瓶頸最嚴重的,是資料庫性能,其次就是網路IO。我沒有深入做過服務端研發,不細說了。


必須可能, 這要看這個1000人都在幹什麼, 如果通訊量非常大 那麼也不太可能不卡,因為socket數據的解包都需要很多時間!
我們前段時間上線內測的遊戲可以達到同屏1500人不會卡。我用的是60fps來跑遊戲,當時應該可以維持在30幀以上!
這與優化也沒有太多的優化方式,就是用大家一致說的點陣圖渲染!
而且目前來說大家的機器也都好了,1000人真沒啥可以吹牛逼的!!
至於同屏人數有很多綜合元素來決定的,而不是某個點,同屏人多後最主要的壓力就是socket處理,同屏處理應該不是太大問題!


有,stage3D能夠做到


作為一個真正上線運營的遊戲,不用stage3D能夠達到1000人同屏而不卡,,這技術,牛了個逼的。一般的技術,不論是點陣圖渲染還是分幀處理,普遍就200-300人同屏,撐死500,不可能上1000的。當然對於那些測試中的遊戲,內容不夠完善,可能會達到1000人。


flash 11可以用gpu渲染,能節省CPU提高點幀數


推薦閱讀:

如何看待魔獸世界新資料片《軍團再臨》?
「劍靈」這款遊戲是如何運營推廣的?
《魔獸世界》2013 年第二季度為何流失 60 萬玩家,對 MMO 類遊戲有何啟示?

TAG:網頁遊戲 | MMORPG | ActionScript3 | Flash開發 |