应用ActionScript对放大镜的继续改进

来源:互联网 发布:软件行业销售招聘 编辑:程序博客网 时间:2024/05/21 12:51

我学习用的是一本叫《Flash MX ActionScript标准教程》的书,其中有一个例程是放大镜的,先照书上的代码来写,自己再慢慢琢磨改进,最后形成现在这个样子了。

书上的例程,对于放大的计算,根本就是错误的,我自己本来就是学地图的,对坐标转移变换比较了解,分析了一下就解决了,原则就是放大时,放大镜在放大图的位置必须与原图一致,后面我找了一下,网上有位兄弟已贴出类似的贴子,http://www.shendo.cn/archives/nettech/pagecode/Flash/techInfo_8225.html

我个人主要做了两个改进

1、不需要在工程里创建大图,直接在程序里产生

2、由上,可以自由定义放大的倍率,用加减号来控制

具体过程我这里不多说了,以下是代码

主时间轴代码 


//---------------------全局变量---------------------------

//设置默认放大倍数为2倍
_global.Rate=2;


//---------------------全局函数---------------------------

//将指定的图片根据指定的倍数放大(缩小)
_global.SetPicSacle=function(picName,scaleRate) {
    setProperty (picName, _xscale, scaleRate
*100);
    setProperty (picName, _yscale, scaleRate
*100);
}

//----------------------主过程-------------------------


//复制要放大的图片,并命名为largeP
duplicateMovieClip (_root.smallPic, "largeP"-1);

//根据指定的倍数放大图片
_global.SetPicSacle("largeP",_global.Rate);
//trace(_global.Rate + " " + );

//开始拖拽放大镜
startDrag("_root.zoom",true);
Mouse.hide();

//设置放大镜的镜片为largeP的蒙板
_root.largeP.setMask(_root.zoom.glass);

 

 

放大镜对象zoom的动作代码

//检测放大镜的移动操作,当其移动时,同步移动放大的图片,使其当前点与图片的当前点在放大镜的中心点吻合
onClipEvent (enterFrame) {
    
//用point保存鼠标当前的坐标位置
    point =new Object();    
    point.x
=_root._xmouse;
    point.y
=_root._ymouse;
    
    
//移动largeP的位置,以使当前点与smallPic的当前点在放大镜的中心点吻合
    _root.largeP._x=(point.x)*(1-_global.Rate)+_root.smallPic._x*_global.Rate;
    _root.largeP._y
=(point.y)*(1-_global.Rate)+_root.smallPic._y*_global.Rate;
    
}

显示图片smallPic的动作代码

 

//图片操作,检测放大镜是否在图片范围内,如是执行放大镜拖拽操作,如否,停止放大镜拖拽操作
onClipEvent (enterFrame) {

    
if(hitTest(_root._xMouse,_root._yMouse,false)) {
        startDrag(
"_root.zoom",true);
        Mouse.hide ();
        _root.largeP._visible
=1;
        _root.zoom._visible
=1;                
    }

    
else {
        stopDrag();
        Mouse.show ();        
        _root.largeP._visible
=0;
        _root.zoom._visible
=0;    
    }

}


//检测键盘操作,如果有按加减键,则进行放大和缩小操作,改变放大镜的放大倍数,最大为4倍,最小为1倍
onClipEvent (KeyDown) {
    
    
var code=Key.getCode();
    
var chg=0;
    
    
//按加号
    if(code==107 or code==187{
        
if(_global.Rate<4{
            _global.Rate
=_global.Rate+0.1;
            chg
=1;
        }

    }
 
    
//按减号
    else if (code==109  or code==189{
        
if(_global.Rate>1{
            _global.Rate
=_global.Rate-0.1;
            chg
=1;
        }

    }

    
    
if(chg=1{
        _global.SetPicSacle(
"largeP",_global.Rate);
    }

    
}
原创粉丝点击