Flash类的运用:可放大、缩小、旋转的鼠标操作类

2016-02-16 19:37 34 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享Flash类的运用:可放大、缩小、旋转的鼠标操作类,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - FLASH 】

希望大家提出意见。修改。废话少说,先看效果:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/flash/)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/flash/)

操作类:

package com.mygamemylove{

import flash.display.DisplayObject;

import flash.display.Graphics;

import flash.display.Sprite;

import flash.events.Event;

import flash.events.MouseEvent;

import flash.geom.Point;

import flash.geom.Rectangle;

public class opObject {

  private var spOp:Sprite;

  private var currentOp:Sprite;

  private var arrPoint:Array;

  //

  private var isDrogOp:Boolean;

  private var isDrog:Boolean;

  private var pointType:uint;

  private var spPoint:Sprite;

  //

  private var sizeType:Number;

  private var minW:Number;

  private var minH:Number;

  private var drawC:uint;

  private var spParent:Sprite;

  //旋转

  private var isR:Boolean

  public var nowRotation:Number;

  public var pCent:Point;

  public var spRotationPoint:Sprite;

  public var spCenterPoint:Sprite;

  public var numOpPointWH:uint;

  

  

  /**

   * 操作一个对象,可以放大缩小,旋转。

   *

   *原创flash代码,尽在自娱自乐  www.MyGameMyLove.com

   *smallerbird   smallerbird@gmail.com 2009-9-12 

   *

   *

   * @spParent:Sprite 操作对象的父对象

   * @currentOp:Sprite 其中操作的一个对象

   * @sizeType:Number 调整尺寸的显示模式。

   * @minW:Number 缩小最小尺寸宽

   * @minH:Number 缩小最小尺寸高

   * @drawC:Number 操作柄的色

   * @numOpPointWH:Number 操作柄的宽高

   * */

  public function opObject(spParent:Sprite,currentOp:Sprite, sizeType:Number=1, 
minW:Number=10, minH:Number=10, drawC:Number=0xff0000, numOpPointWH:uint=10){ 


   this.numOpPointWH=numOpPointWH;

   this.currentOp=currentOp

   this.spParent=spParent;

   this.spParent.mouseEnabled=false;

   this.sizeType=sizeType;

   this.minW=minW;

   this.minH=minH;

   isDrogOp=false;

   isDrog=false;

   pointType=0;

   arrPoint=new Array();

   nowRotation=0;

   isR=true

  }

源代码下载地址:http://www.mygamemylove.com/bbs/viewthread.php?tid=48

  //改变注册点

  public static function RegPoint($obj:Sprite, $point:Point):void {

   var tmp_point:Point=$obj.parent.globalToLocal($obj.localToGlobal($point));

   var len:int=$obj.numChildren;

   while (len--) {

    var tmp_obj:DisplayObject=$obj.getChildAt(len);

    tmp_obj.x-=$point.x;

    tmp_obj.y-=$point.y;

   }

   $obj.x=tmp_point.x;

   $obj.y=tmp_point.y;

  }

  private function drawR(g:Graphics, c:uint, x:Number, y:Number, w:Number, h:Number):void {

   g.beginFill(c, 0.5);

   g.drawRoundRect(x, y, w, h, 5);

   g.endFill();

  }

  private function drawOpPont(sp:Sprite, x:Number, y:Number, c:uint, w:Number, h:Number):void {

   var spTem:Sprite=new Sprite();

   spTem.x=x;

   spTem.y=y;

   drawR(spTem.graphics, c, -w / 2, -h / 2, w, h);

   sp.addChild(spTem);

   arrPoint.push(spTem);

  }

  //

  private function clrPointSize():void {

   if (arrPoint.length != 0) {

    for (var i:uint=0; i  arrPoint.length; i++) {

     arrPoint[i].removeEventListener(MouseEvent.MOUSE_DOWN, fun_point_down);

     arrPoint[i].removeEventListener(MouseEvent.MOUSE_UP, fun_point_up);

     spParent.removeChild(arrPoint[i]);

    }

    arrPoint=new Array();

   }

   spParent.graphics.clear();

  }

  //

  private function clrPoint():void {

   clrPointSize();

   if (spCenterPoint != null) {

    spParent.removeChild(spCenterPoint);

    spCenterPoint=null;

    spParent.removeChild(spRotationPoint);

   }

  }

  //

  private function showOp4point(sp:Sprite):void {

   //

   clrPoint();

   var r:Rectangle=sp.getRect(spParent);

   //

   var x1:Number=r.x;

   var y1:Number=r.y;

   var w1:Number=r.width;

   var h1:Number=r.height;

   var w2:Number=w1 / 2;

   var h2:Number=h1 / 2;

   //

   var c:uint=drawC;

   var p_tem:Sprite=spParent;

   //

   pCent=new Point(x1 + w2, y1 + h2);

   //

   drawOpPont(p_tem, x1, y1, c, numOpPointWH, numOpPointWH);

   drawOpPont(p_tem, x1 + w2, y1, c, numOpPointWH, numOpPointWH);

   drawOpPont(p_tem, x1 + w1, y1, c, numOpPointWH, numOpPointWH);

   //

   drawOpPont(p_tem, x1 + w1, y1 + h2, c, numOpPointWH, numOpPointWH);

   drawOpPont(p_tem, x1 + w1, y1 + h1, c, numOpPointWH, numOpPointWH);

   //

   drawOpPont(p_tem, x1 + w2, y1 + h1, c, numOpPointWH, numOpPointWH);

   drawOpPont(p_tem, x1, y1 + h1, c, numOpPointWH, numOpPointWH);

   drawOpPont(p_tem, x1, y1 + h2, c, numOpPointWH, numOpPointWH);

   for (var i:uint=0; i  arrPoint.length; i++) {

    arrPoint[i].addEventListener(MouseEvent.MOUSE_DOWN, fun_point_down);

    arrPoint[i].addEventListener(MouseEvent.MOUSE_UP, fun_point_up);

   }

   //

   //画连线

   var gTem:Graphics=p_tem.graphics;

   gTem.clear();

   gTem.lineStyle(1, c, 0.5);

   gTem.moveTo(arrPoint[0].x, arrPoint[0].y);

   for (i=1; i  arrPoint.length; i++) {

    gTem.lineTo(arrPoint[i].x, arrPoint[i].y);

   }

   gTem.lineTo(arrPoint[0].x, arrPoint[0].y);

   gTem.lineTo(arrPoint[4].x, arrPoint[4].y);

   gTem.moveTo(arrPoint[6].x, arrPoint[6].y);

   gTem.lineTo(arrPoint[2].x, arrPoint[2].y);

   //

   gTem.moveTo(arrPoint[1].x, arrPoint[1].y);

   gTem.lineTo(arrPoint[5].x, arrPoint[5].y);

   //

   gTem.moveTo(arrPoint[7].x, arrPoint[7].y);

   gTem.lineTo(arrPoint[3].x, arrPoint[3].y);

   //画旋转的点

   //中心点

   if(isR){

   spCenterPoint=new Sprite();

   spCenterPoint.mouseEnabled=false;

   spCenterPoint.graphics.beginFill(0xff0000, 0.5);

   spCenterPoint.graphics.drawCircle(0, 0, numOpPointWH / 2);

   spCenterPoint.graphics.endFill();  

   spCenterPoint.x=pCent.x;

   spCenterPoint.y=pCent.y;

   var pTem:Point=currentOp.globalToLocal(pCent);

   spParent.addChild(spCenterPoint);

   //旋转控制点

   spRotationPoint=new Sprite();

   spRotationPoint.graphics.beginFill(0xff0000, 0.5);

   spRotationPoint.graphics.drawCircle(0, 0, numOpPointWH / 2);

   spRotationPoint.graphics.endFill();

   spRotationPoint.x=x1 - numOpPointWH;

   spRotationPoint.y=y1 - numOpPointWH;

   spParent.addChild(spRotationPoint);

   spRotationPoint.addEventListener(MouseEvent.MOUSE_DOWN, fun_point_down);

   spRotationPoint.addEventListener(MouseEvent.MOUSE_UP, fun_point_up);

   }

  //

  }

  public function fun_opUp(e:MouseEvent):void {

   isDrogOp=false;

   currentOp.stopDrag();

   showOp4point(currentOp);

  }

  //如果isR=false 不可以进行旋转操作

  public function fun_opDown(e:MouseEvent,isR:Boolean=true):void {

   this.isR=isR

   currentOp=e.target as Sprite;

   showOp4point(currentOp);

   //

   currentOp.startDrag();

   isDrogOp=true;

  }

  public function fun_over(e:MouseEvent):void {

   var spTem:Sprite=e.target as Sprite;

  }

  //

  //不能越过边界

  public function noMoveBorder(rBorder:Rectangle):uint {

   var r:Rectangle = currentOp.getBounds(spParent)

   var numOffsetTem:Number=10

   if(rBorder.width-numOffsetTemr.width){

    currentOp.width=rBorder.width-numOffsetTem

    return 0

   }

   if(rBorder.height-numOffsetTemr.height){

    currentOp.height=rBorder.height-numOffsetTem

    return 0

   }

   //trace(currentOp);

   if (r.xrBorder.x) {

    opObject.RegPoint(currentOp, currentOp.globalToLocal(pCent));

    no();

    currentOp.x=rBorder.x+r.width/2;

   }

   if (r.yrBorder.y) {

    opObject.RegPoint(currentOp, currentOp.globalToLocal(pCent));

    no();

    currentOp.y=rBorder.y+r.height/2;

   }

   if (r.x+r.widthrBorder.x+rBorder.width) {

    opObject.RegPoint(currentOp, currentOp.globalToLocal(pCent));

    no();

    currentOp.x=rBorder.x+rBorder.width-r.width/2;

   }

   if (r.y+r.heightrBorder.y+rBorder.height) {

    opObject.RegPoint(currentOp, currentOp.globalToLocal(pCent));

    no();

    currentOp.y=rBorder.y+rBorder.height-r.height/2;

   }

   return 0

  }

  //取消的所有动作

  public function no():void {

   isDrog=false;

   clrPoint();

   if (spPoint) {

    spPoint.stopDrag();

   }

   currentOp.stopDrag();

  }

  //重新设置注册点

  private function seCentXY():void {

   var pTem:Point;

   switch (pointType) {

    case 1 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[4].x, arrPoint[4].y));

     break;

    case 2 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[5].x, arrPoint[5].y));

     break;

    case 3 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[6].x, arrPoint[6].y));

     break;

    case 4 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[7].x, arrPoint[7].y));

     break;

    case 5 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[0].x, arrPoint[0].y));

     break;

    case 6 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[1].x, arrPoint[1].y));

     break;

    case 7 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[2].x, arrPoint[2].y));

     break;

    case 8 :

     pTem=currentOp.globalToLocal(new Point(arrPoint[3].x, arrPoint[3].y));

     break;

   }

   opObject.RegPoint(currentOp, pTem);

  }

  private function fun_point_down(e:MouseEvent):void {

   //

   var spTem:Sprite=e.target as Sprite;

   spPoint=spTem;

   if (spRotationPoint == spPoint) {

    var dx:Number=currentOp.parent.mouseX - pCent.x;

    var dy:Number=currentOp.parent.mouseY - pCent.y;

    nowRotation-=(Math.atan2(dy, dx) * 180 / Math.PI);

    var pTem:Point=currentOp.globalToLocal(pCent);

    opObject.RegPoint(currentOp, pTem);

    spTem.alpha=0;

    clrPointSize();

   } else {

    pointType=0;

    for (var i:uint=0; i  arrPoint.length; i++) {

     if (arrPoint[i] == spTem) {

      pointType=i + 1;

      break;

     }

    }

    seCentXY();

   }

   isDrog=true;

   spTem.startDrag(true);

  }

  private function fun_point_up(e:MouseEvent):void {

   nowRotation=currentOp.rotation;

   clrPoint();

  }

  private function isUpObj(sp:Sprite):Boolean {

   var isRe:Boolean=false;

   if (currentOp == sp) {

    isRe=true;

   } else {

    for (var i:uint=0; i  arrPoint.length; i++) {

     if (arrPoint[i] == sp) {

      isRe=true;

      break;

     }

    }

    //

    if (spRotationPoint == sp) {

     isRe=true;

    }

   }

   return isRe;

  }

  public function fun_Mouse_up(e:MouseEvent):void {

   isDrog=false;

   if (!isUpObj(e.target as Sprite)) {

    clrPoint();

   } else {

    if (spPoint) {

     spPoint.stopDrag();

    }

   }

  }



  public function fun_onEnterFrame(e:Event):Boolean {

   if (isDrogOp) {

    showOp4point(currentOp);

   }

   if (!isDrog) {

    return false;

   }

   var spTem:Sprite=spPoint;

   var dx:Number, dy:Number;

   //旋转

   if (spRotationPoint == spPoint) {

    dx=currentOp.parent.mouseX - pCent.x;

    dy=currentOp.parent.mouseY - pCent.y;

    currentOp.rotation=(Math.atan2(dy, dx) * 180 / Math.PI) + nowRotation;

    return true;

   }

   //放大///////////////

   switch (pointType) {

    case 1 :

     dx=arrPoint[4].x - spTem.x;

     dy=arrPoint[4].y - spTem.y;

     break;

    case 2 :

     dx=0;

     dy=arrPoint[5].y - spTem.y;

     break;

    case 3 :

     dx=spTem.x - arrPoint[6].x;

     dy=arrPoint[6].y - spTem.y;

     break;

    case 4 :

     dx=spTem.x - arrPoint[7].x;

     dy=0;

     break;

    case 5 :

     dx=spTem.x - arrPoint[0].x;

     dy=spTem.y - arrPoint[0].y;

     break;

    case 6 :

     dx=0;

     dy=spTem.y - arrPoint[1].y;

     break;

    case 7 :

     dx=arrPoint[2].x - spTem.x;

     dy=spTem.y - arrPoint[2].y;

     break;

    case 8 :

     dx=arrPoint[3].x - spTem.x;

     dy=0;

     break;

   }

   if (dx  minW) {

    currentOp.width=dx;

   }

   if (dy  minH) {

    currentOp.height=dy;

   }

   showOp4point(currentOp);

   return true;

  }

}

}

来源:http://www.tulaoshi.com/n/20160216/1572614.html

延伸阅读
基于位操作的类CBitBuffer 作者:阳光 由于工作的需要,我写了一个基于位操作的类,由CFile类模仿而来。写的比较仓促,许多操作效率较低,有待改进。 该代码对我比较有用,如果你对代码有任何改进希望你能告诉我。Email:mymong@163.net 一、类定义 class CBitBuffer  {private: LONGLONG  m_llLength;   ...
AS3.0 含有多个类的AS3类文件 标准的AS3类文件是以".as"为结尾的纯文本文件。一个类文件可以包含一个或多个类定义,甚至可以直接写入一次性执行的语句。AS3中,在package花括号外,可以定义一个或多个Class,不可与文件同名。这些花括号外的类,称为当前类文件的包外类。只有当前类文件中的成员可以访问。 包外类的产生,每个.as...
标签: flash教程
简单的检测鼠标是否有移动的类 class MouseMove extends MovieClip { private var _nx:Number; private var _ny:Number; private var _ox:Number; private var _oy:Number; public function isMoving():Boolean { _nx = _level0._xmouse; _ny = _level0._ymouse; if ((_nx-_ox)!=0 || (_ny-_oy) != 0) { _ox = _nx; _oy = _ny; return true; ...
看看效果:     第一步: 打开FLASH,新建一个影片剪辑元件,命名为星星,在里面绘制一个星星出来,并且把它的中心点和舞台注册点对齐,在第20帧和第40处各插入一个关键帧。选中第20帧,在它的中心点和舞台的注册点对齐的情况下按住SHIFT键进行等比例缩小(你认为差不多就行了),然后选中第1到20帧...
标签: Web开发
看看我们的jQuery为我们都提供了哪些可用的方法: size():很明显,它应该是返回包装集中的元素个数,如$('a').size()表示链接元素的个数; get(index):当没指定index时就默认取包装集中所有元素,并以js中的数组形式返回,如果指定了index,则返回下标为index对应的元素,如$('img[title]').get(0)返回包含属性title的第一个img元...

经验教程

641

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部