Show
Ignore:
Timestamp:
12/11/07 01:48:40 (13 months ago)
Author:
gyuque
Message:

lang/actionscript/swfgmap: implemented zooming animation.

Location:
lang/actionscript/swfgmap/trunk
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as

    r3003 r3028  
    126126                        z += d; 
    127127                        if (z < 0)  z = 0; 
    128                         if (z > 16) z = 16; 
    129                          
     128                        if (z > 17) z = 17; 
     129                         
     130                        var oldZ:int = mCurrentViewport.zoom; 
    130131                        mCurrentViewport.zoom = z; 
     132                         
     133                        if (mCurrentViewport.zoom == oldZ) 
     134                                return; 
     135                         
    131136                        if (px >= 0 || py >= 0) { 
    132137                                var mv:Point = calcFixedPointZoom(px, py, (d>0) ? 2 : 0.5, mCurrentViewport); 
     
    134139                        } 
    135140                         
    136                         fireViewportChange(0,0,z - oldz, animation); 
     141                        fireViewportChange(mv.x, mv.y, z - oldz, animation); 
    137142                } 
    138143                 
     
    148153                        var dy:Number = sy2 - sy; 
    149154                 
    150 //                      var retval:Point = new Point(); 
    151 //                      vpAfter.transformVectorScreenToView(dx, dy, retval); 
    152 //                      return retval; 
    153155                        return new Point(dx, dy); 
    154156                } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/Layer.as

    r3003 r3028  
    3232                } 
    3333                 
    34                 protected function onViewportChanged(e:GMapViewEvent):void 
     34                public function onViewportChanged(e:GMapViewEvent):void 
    3535                {} 
    3636                 
     
    4545                }                
    4646                 
    47                 public function relay(e:GMapViewEvent):void 
     47                public function clone():Layer 
    4848                { 
     49                        return new Layer(mEventSource, mParent); 
    4950                } 
    5051        } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/LayerManager.as

    r3003 r3028  
    77                 
    88                private var mAnimDisp:IAnimationDispatcher; 
     9                private var mTransformMat:Matrix = new Matrix(); 
    910                 
    1011                public function LayerManager(c:DisplayObjectContainer) 
     
    1819                } 
    1920                 
    20                 public function floatLayer(idx:int):void 
    21                 { 
    22                         //getChildAt( 
    23                 } 
    2421                 
    2522                public function removeLayer(idx:int, floatLayer:Boolean):void 
    2623                { 
    2724                        var cidx:int = idx*2 + (floatLayer ? 1 : 0); 
    28                         if (getChildAt(cidx)) 
     25                        if (cidx <= numChildren && getChildAt(cidx)) 
    2926                                removeChildAt(cidx); 
    3027                } 
     
    3633                } 
    3734                 
    38                 protected override function onViewportChanged(e:GMapViewEvent):void 
     35                public override function onViewportChanged(e:GMapViewEvent):void 
    3936                { 
    4037                        var firstset:Boolean = false; 
     
    7067                        M.ty = v.height * 0.5; 
    7168                         
     69                        mTransformMat = M; 
     70                        transform.matrix = M; 
     71                } 
     72                 
     73                public function set postZoom(r:Number):void 
     74                { 
     75                        var M:Matrix = mTransformMat.clone(); 
     76                        M.a *= r; 
     77                        M.b *= r; 
     78                        M.c *= r; 
     79                        M.d *= r; 
    7280                        transform.matrix = M; 
    7381                } 
     
    7785                        out.x = 0; 
    7886                        out.y = 0; 
    79                         //mViewport.transformVectorScreenToView(mPanPos.x, mPanPos.y, out); 
    8087                } 
    8188                 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/PointZoomAnimation.as

    r3003 r3028  
    33        public class PointZoomAnimation extends Animation 
    44        { 
     5                import flash.geom.Point; 
     6                 
    57                private var mOldLayer:Layer; 
    68                private var mViewEvent:GMapViewEvent; 
    7                 public function PointZoomAnimation(oldLayer:Layer, e:GMapViewEvent) 
     9                private var mLayerMan:LayerManager; 
     10                private var mFloatingIndex:int; 
     11                private var mDZoom:int; 
     12                private var STEPS:int = 6; 
     13                private var mCount:int = 0; 
     14                 
     15                private var mOrgX:Number; 
     16                private var mOrgY:Number; 
     17                private var mShift:Point; 
     18                 
     19                public function PointZoomAnimation(oldLayer:Layer, e:GMapViewEvent, man:LayerManager) 
    820                { 
    921                        mOldLayer  = oldLayer; 
     22                         
     23                        mDZoom = e.dZoom; 
     24                        e.dZoom = 0; 
     25                         
    1026                        mViewEvent = e; 
     27                        mLayerMan = man; 
     28                        mOrgX = oldLayer.x; 
     29                        mOrgY = oldLayer.y; 
     30                         
     31                        mShift = new Point(e.screenDX, e.screenDY); 
     32                        e.screenDX = 0; 
     33                        e.screenDY = 0; 
     34                         
    1135                } 
    1236                 
     37                private function relayAndFloat():void 
     38                { 
     39                        mOldLayer.terminate(); 
     40                         
     41                        var cidx:int = mOldLayer.layerIndex*2; 
     42                        mFloatingIndex = cidx+1; 
     43                        if (cidx < (mLayerMan.numChildren-1) && mLayerMan.getChildAt(mFloatingIndex)) 
     44                                mLayerMan.removeChildAt(mFloatingIndex); 
     45                                         
     46                        mLayerMan.removeChildAt(cidx); 
     47                        var newLayer:Layer = mOldLayer.clone(); 
     48                        mLayerMan.addChildAt(newLayer, cidx); 
     49                        mLayerMan.addChildAt(mOldLayer, mFloatingIndex); 
     50                                         
     51                        newLayer.onViewportChanged(mViewEvent); 
     52                } 
    1353                 
    1454                public override function next():Boolean 
    1555                { 
    16                         skip(); 
    17                         return false; 
     56                        if (mCount == 0) 
     57                                relayAndFloat(); 
     58 
     59                        if (++mCount >= STEPS) 
     60                        { 
     61                                skip(); 
     62                                return false; 
     63                        } 
     64                         
     65                        var rt:Number = 0.14 * mCount; 
     66                        var pz:Number = (mDZoom > 0) ? (rt + 1.0) : (1.0 - rt/2); 
     67                         
     68                        mLayerMan.postZoom = pz;         
     69                        mOldLayer.x = mOrgX - rt * mShift.x/pz; 
     70                        mOldLayer.y = mOrgY - rt * mShift.y/pz; 
     71                         
     72                        return true; 
    1873                } 
    1974                 
    2075                public override function skip():void 
    2176                { 
    22                         mOldLayer.terminate(); 
    23                         mOldLayer.relay(mViewEvent); 
    24                 }                
     77                        mLayerMan.postZoom = 1; 
     78                        if (mFloatingIndex < mLayerMan.numChildren && mLayerMan.getChildAt(mFloatingIndex) == mOldLayer) 
     79                                mLayerMan.removeChildAt(mFloatingIndex); 
     80                } 
    2581        } 
    2682} 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/googlemaps/GMapMapLayer.as

    r3003 r3028  
    4141                } 
    4242                 
    43                 protected override function onViewportChanged(e:GMapViewEvent):void 
     43                public override function onViewportChanged(e:GMapViewEvent):void 
    4444                { 
    4545                        var firstset:Boolean = false; 
     
    4949                        if (e.dZoom) 
    5050                        { 
    51                                 e.dZoom = 0; 
    52                                  
    53                                 var a:PointZoomAnimation = new PointZoomAnimation(this, e); 
    54                                 addAnimation(a); 
     51                                if (mParent is LayerManager) 
     52                                { 
     53                                        var a:PointZoomAnimation = new PointZoomAnimation(this, e, LayerManager(mParent)); 
     54                                        addAnimation(a); 
     55                                } 
    5556                                 
    5657                                return; 
     
    7071                } 
    7172 
    72                 public override function relay(e:GMapViewEvent):void 
     73                public override function clone():Layer 
    7374                { 
    74                         var man:LayerManager; 
    75                         if (mParent is LayerManager) 
    76                                 man = LayerManager(mParent); 
    77                         else 
    78                                 return; 
    79                          
    80                         man.removeLayer(layerIndex, false); 
    81                          
    82                         var newLayer:GMapMapLayer = new GMapMapLayer(mEventSource, man); 
     75                        var newLayer:GMapMapLayer = new GMapMapLayer(mEventSource, mParent); 
    8376                        newLayer.layerIndex = layerIndex; 
    8477                        newLayer.debug_out = mVPobs.dout; // 
    85                         man.putLayer(layerIndex, newLayer); 
    86                         newLayer.onViewportChanged(e); 
     78                         
     79                        return newLayer 
    8780                } 
    8881