本页面由 Flash 保存计划 从 Internet Archive 存档还原 · 快照 2013-01-17 · 原址 http://space.flash8.net/bbs/thread-362283-1-1.html ← Flash 保存计划
返回列表 回复 发帖

一个放大效果的实现

/*---design by whb in 2008-9-1---
参数变量:mc:需要放大的图形*/
package maths{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.events.MouseEvent;
import flash.geom.Point;
public class ZoomImage extends Sprite {
  private var sprBitmapData:BitmapData;
  private var sprBitmap:Bitmap;
  private var Rect:Rectangle;
  private var Matr:Matrix;
  private var mc:Sprite;
  private var Mdown_x,Mdown_y,Mup_x,Mup_y:Number;
  public function ZoomImage(_mc:Sprite) {
   mc=_mc;
   mc.addEventListener(flash.events.MouseEvent.MOUSE_DOWN,Mdown_fc);
   mc.addEventListener(flash.events.MouseEvent.MOUSE_MOVE,Mmove_fc);
   mc.addEventListener(flash.events.MouseEvent.MOUSE_UP,Mup_fc);
  }//end of ZoomImage
  private function Mdown_fc(e:flash.events.MouseEvent) {
   Mdown_x=e.localX;
   Mdown_y=e.localY;
  }//end of Mdown_fc
  private function Mmove_fc(e:flash.events.MouseEvent) {
  }//end of Mmove_fc
  private function Mup_fc(e:flash.events.MouseEvent) {
   if (e.localX>Mdown_x&&e.localY>Mdown_y) {
    var localP:Point=new Point(Mdown_x,Mdown_y);
    if (sprBitmap!=null) {
     removeChild(sprBitmap);
    }
    Mup_x=e.localX;
    Mup_y=e.localY;
    Matr=new Matrix(1,0,0,1,-Mdown_x,-Mdown_y);
    sprBitmapData=new BitmapData(Mup_x-Mdown_x,Mup_y-Mdown_y);
    sprBitmap=new Bitmap(sprBitmapData);
    sprBitmapData.draw(mc,Matr);
    addChild(sprBitmap);
    this.scaleX=this.scaleY=2;
    this.x=mc.localToGlobal(localP).x;
    this.y=mc.localToGlobal(localP).y;
    //
    this.addEventListener(flash.events.MouseEvent.MOUSE_DOWN,MD_fc);
    this.addEventListener(flash.events.MouseEvent.MOUSE_UP,MU_fc);
   }
  }//end of Mup_fc
  //
  private function MD_fc(e:flash.events.MouseEvent) {
   e.target.startDrag();
  }
  private function MU_fc(e:flash.events.MouseEvent) {
   e.target.stopDrag();
  }
}//end of class
}//end of package
zoomImage.swf (5.67 KB)
拖动后只能看到你一半的图呃。是不是我的电脑问题?
this.scaleX=this.scaleY=2;
是关键吧?2倍显示。1表示100%,2表示200%
类我没学清楚,你类还要加类名的么?maths, 这个有什么用,能说说么。我学的类,都没有类名

[ 本帖最后由 caisenqun 于 2008-9-2 23:40 编辑 ]
maths是包名,也就是放ZoomImage.as的文件夹。
更新(加了鼠标滚动放大):
/*---design by whb in 2008-9-1---
参数变量:mc:需要放大的图形*/
package maths{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.geom.Rectangle;
        import flash.geom.Matrix;
        import flash.events.MouseEvent;
        import flash.geom.Point;
        public class ZoomImage extends Sprite {
                private var sprBitmapData:BitmapData;
                private var sprBitmap:Bitmap;
                private var Rect:Rectangle;
                private var Matr:Matrix;
                private var mc:Sprite;
                private var Mdown_x,Mdown_y,Mup_x,Mup_y:Number;
                public function ZoomImage(_mc:Sprite) {
                        mc=_mc;
                        mc.addEventListener(flash.events.MouseEvent.MOUSE_DOWN,Mdown_fc);
                        mc.addEventListener(flash.events.MouseEvent.MOUSE_MOVE,Mmove_fc);
                        mc.addEventListener(flash.events.MouseEvent.MOUSE_UP,Mup_fc);

                }//end of ZoomImage
                private function Mdown_fc(e:flash.events.MouseEvent) {
                        Mdown_x=e.localX;
                        Mdown_y=e.localY;
                }//end of Mdown_fc
                private function Mmove_fc(e:flash.events.MouseEvent) {
                }//end of Mmove_fc
                private function Mup_fc(e:flash.events.MouseEvent) {
                        if (e.localX > Mdown_x && e.localY > Mdown_y) {
                                var localP:Point=new Point(Mdown_x,Mdown_y);
                                if (sprBitmap != null) {
                                        removeChild(sprBitmap);
                                }
                                Mup_x=e.localX;
                                Mup_y=e.localY;
                                Matr=new Matrix(1,0,0,1,- Mdown_x,- Mdown_y);
                                sprBitmapData=new BitmapData(Mup_x - Mdown_x,Mup_y - Mdown_y);
                                sprBitmap=new Bitmap(sprBitmapData);
                                sprBitmapData.draw(mc,Matr);
                                addChild(sprBitmap);
                                this.scaleX=this.scaleY=2;
                                this.x=mc.localToGlobal(localP).x;
                                this.y=mc.localToGlobal(localP).y;
                                //
                                this.addEventListener(flash.events.MouseEvent.MOUSE_DOWN,MD_fc);
                                this.addEventListener(flash.events.MouseEvent.MOUSE_UP,MU_fc);
                                this.addEventListener(flash.events.MouseEvent.MOUSE_WHEEL,MW_fc);
                        }
                }//end of Mup_fc
                private function MW_fc(e:flash.events.MouseEvent) {
                        if (e.target.scaleX>1&&e.target.scaleX<5) {
                                e.target.scaleX+=0.03*e.delta;
                                e.target.scaleY+=0.03*e.delta;
                        }else{
                                e.target.scaleX=e.target.scaleY=1.1;
                                }
                }//end of MW_fc
                private function MD_fc(e:flash.events.MouseEvent) {
                        e.target.startDrag();
                }//end of MD_fc
                private function MU_fc(e:flash.events.MouseEvent) {
                        e.target.stopDrag();
                }//end of MU_fc
        }//end of class
}//end of package
zoomImage.swf (5.78 KB)
返回列表