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,以供使用。
相关文章
相关标签/搜索