arpg網頁遊戲之地圖(四)

這一節主要是針對上一節的補充,關於地圖的優化策略上一節中已經涉及了一些,這一節具體說下。網絡

  1. 地圖塊加載隊列:就拿1280*800的屏幕分辨率來說,大約須要加載的地圖塊爲30~35塊之間,若是這個時候一會兒加載這麼多地圖塊,佔用的網絡帶寬會比較多,由於IE加載資源也是有限制的,若是多餘限制就會加入排隊機制。因此這個時候,就須要一個地圖加載隊列,來限制同時加載地圖塊的數量,好比能夠同時加載兩個,當兩個當中哪一個Loader加載完,此對象回收,而後從新下一個。
  2. 渲染策略優化,實際就是分幀運算的遠離。即沒幀只加載一個地圖塊,而且只draw一塊已經下載完的地圖。代碼參考上一節。
  3. 進入地圖以前,先顯示馬賽克。代碼以下:
public function set thumbnail(bmd:BitmapData) : void
        {
            if (thumbnailData == bmd)
                return;
            thumbnailData = bmd;
            g.clear();
            g.beginBitmapFill(thumbnailData, scaleMatrix);
            g.drawRect(0, 0, viewPort.maxRect.width, viewPort.maxRect.height);
        }

還有兩個問題:優化

  1. 切換地圖以前,要把以前加載的地圖塊銷燬,而且觸發一次垃圾回收,這樣會有效的減小內存。地圖銷燬,包括已經加載完成,正在加載的,加載完成未顯示的都要銷燬。Flash 回收機制的策略是對象的引用次數爲0,而後就會回收。觸發Flash強制垃圾回收,須要創造一個異常,代碼以下:private
private function gcByException():void        
{
            try
            {
                new LocalConnection().connect("foo");
                new LocalConnection().connect("foo");
            } 
            catch (e:Error)
            {
            } 
            return;
}

      2.震屏的實現(TweenMax實現):spa

public static function shake(target:DisplayObject, distance:int = 10, delay:Number = 0.5): void
        {
            var targetX:* = target.x;
            var targetY:* = target.y;
            var shakeDis:* = distance;
            TweenMax.killTweensOf(target);
            TweenMax.to(target, delay, {bezierThrough:[{x:targetX, y:targetY + distance}, {x:targetX, y:targetY - distance},  {x:targetX, y:targetY + distance/4}, {x:targetX, y:targetY - distance/4},{x:targetX, y:targetY}]});
            return;
        }
關於遊戲推圖基本就這些內容,此工程比較獨立,能夠單獨編譯成一個單獨的swc,以供使用。
相關文章
相關標籤/搜索