loadin Do…

一条只能往前走的路,叫时光.

首页 联系 订阅 管理

1.画饼图:author:ycccc8202

Title
/**
* @class:DrawPieGraph(画饼状图)
* @author:ycccc8202
* @date:2007.8.16
* @example:
* import com.ycccc.Graphics.DrawPieGraph
* var dataList:Array=[10,10,10,100,10,10,10,100];
* var pie:DrawPieGraph=new DrawPieGraph(200,200,150,90,15,dataList,null);
* addChild(pie);
* //pie.clearAll()--->清空
* //pie.contain--->获取所有分块的引用对象,方便类外进行操作
*/
package com.ycccc.Graphics{
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
import flash.events.MouseEvent;
public class DrawPieGraph extends MovieClip {
public static var PIE_NAME:String="pie"
  //存放shape对象
  private var __contain:Object;
  //设置角度从-90开始
  private var R:int=-90;
  private var D:uint=30;
  private var _shape:Shape;
  //初始饼图的圆心位置
  private var _x0:Number;
  private var _y0:Number;
  //椭圆饼图的长轴与短轴长度
  private var _a:Number;
  private var _b:Number;
  //饼图的厚度
  private var _h:Number;
  //透明度
  private var _alpha:Number;
  //数据列表
  private var _dataList:Array;
  private var _colorList:Array;
  private var _angleList:Array;
  private var _depthList:Array;
  //
  private var _tween1:Tween;
  private var _tween2:Tween;
  /**
  *@param:x0......>圆心x坐标
  *@param:y0......>圆心y坐标
  *@param:a......>长轴
  *@param:b......>短轴
  *@param:h......>厚度
  *@param:dataList......>数据列表
  *@param:dataList......>颜色列表
  *@alpha:Number......>透明度(有确省值)
  */
  public function DrawPieGraph(x0:Number,y0:Number,a:Number,b:Number,h:Number,dataList:Array,colorList:Array,alpha:Number=.7) {
   _x0=x0;
   _y0=y0;
   _a=a;
   _b=b;
   _h=h;
   _alpha=alpha
   _dataList=dataList==null?[1,1,1,1,1,1,1,1]:dataList;
   _colorList=colorList==null?[0xFF0F00,0xFF6600,0xFF9E01,0xFCD202,0xF8FF01,0xB0DE09,0x04D215,0x0D8ECF]:colorList;
   setAngleList();
   drawPie();
   setDepths();
  }
  private function setAngleList():void {
   _angleList=[];
   var totalData:int;
   var len:uint=_dataList.length;
   for (var j:uint=0; j < len; j++) {
    totalData+= _dataList[j];
   }
   for (j=0; j < len; j++) {
    if (j == len - 1) {
     _angleList.push([R,270]);
    } else {
     var r:uint=Math.floor(_dataList[j] / totalData * 360);
     var posR:int=R + r;
     _angleList.push([R,posR]);
     R=posR;
     trace(r+"___r");
     trace(R);
    }
   }
   trace(_angleList + ":::");
  }
  private function setDepths():void {
   _depthList=[];
   var len:uint=_angleList.length;
   for (var j:uint=0; j < len; j++) {
    var minJ:Number=_angleList[j][0];
    var maxJ:Number=_angleList[j][1];
    switch (true) {
     case minJ >= -90 && minJ <= 90 && maxJ<=90 :
      _depthList[j]=minJ;
      break;
     default :
      _depthList[j]=1000-minJ;
    }
   }//end for
   trace(_depthList + "::::_depthList");
   _depthList=_depthList.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
   trace(_depthList);
   for (j=0; j<len; j++) {
    setChildIndex(__contain[DrawPieGraph.PIE_NAME+_depthList[j]],j);
   }
  }
  private function drawPie():void {
   __contain={};
   var len:uint=_angleList.length;
   var step:uint=1;
   for (var j:uint=0; j < len; j++) {
    var pie:MovieClip=__contain[DrawPieGraph.PIE_NAME+j]=new MovieClip;
    //
    pie.out=false;
    //设置中心角,方便以下进行点中移动
   pie.r=(_angleList[j][0]+_angleList[j][1])/2;
    pie.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    addChild(pie);
    var drakColor:uint=getDarkColor(_colorList[j]);//深色
    var g:Graphics=pie.graphics;
    //g.lineStyle(1);
    //先画底
    //内弧
    g.beginFill(_colorList[j],_alpha);
    g.moveTo(_x0,_y0+_h);
    var r:Number=_angleList[j][0];
    var minR:Number=r;
    var maxR:int=_angleList[j][1];
    while (r + step < maxR) {
     g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,r).x,getRPoint(_x0,_y0 + _h,_a,_b,r).y);
     r+= step;
    }
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    //
    g.endFill();
    //画内侧面
    g.beginFill(drakColor,_alpha);
    g.moveTo(_x0,_y0+_h);
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    g.lineTo(getRPoint(_x0,_y0,_a,_b,minR).x,getRPoint(_x0,_y0,_a,_b,minR).y);
    g.lineTo(_x0,_y0);
    g.endFill();
    //画外侧面
    g.beginFill(drakColor,_alpha);
    g.moveTo(_x0,_y0+_h);
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    g.lineTo(_x0,_y0);
    g.endFill();

    //画外弧侧面
    g.beginFill(drakColor,_alpha);
    //g.lineStyle(1);
    g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    g.lineTo(getRPoint(_x0,_y0,_a,_b,minR).x,getRPoint(_x0,_y0,_a,_b,minR).y);
    r=minR;
    while (r + step < maxR) {
     r+= step;
     g.lineTo(getRPoint(_x0,_y0,_a,_b,r).x,getRPoint(_x0,_y0,_a,_b,r).y);
    }
    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    while (r - step > minR) {
     g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,r).x,getRPoint(_x0,_y0 + _h,_a,_b,r).y);
     r-= step;
    }
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    g.endFill();
    //画上表面
    g.beginFill(_colorList[j],_alpha);
    g.moveTo(_x0,_y0);
    r=minR;
    while (r + step < maxR) {
     g.lineTo(getRPoint(_x0,_y0,_a,_b,r).x,getRPoint(_x0,_y0,_a,_b,r).y);
     r+= step;
    }
    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    g.endFill();
   }
  }
  private function onMouseDownX(e:MouseEvent):void {
   var TG:MovieClip=e.target as MovieClip;
   var posX:Number=getRPoint(0,0,D,D,TG.r).x;
   var posY:Number=getRPoint(0,0,D,D,TG.r).y;
   if (!TG.out) {
    trace("///////");
    trace("起点");
    trace(TG.name);
    trace("///////");
    TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,0,posX,1.5,true);
    TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,0,posY,1.5,true);
   } else {
    trace("///////");
    trace("终点");
    trace(TG.name);
    trace("///////");
    TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    trace([TG.x,TG.y]);
    TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,TG.x,0,1,true);
    TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,TG.y,0,1,true);
   }
   TG["tweenX"].addEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
  }
  private function onMotionFinish(e:TweenEvent):void {
   //trace(e.position+"...position");
   var TG:MovieClip=e.currentTarget.obj as MovieClip;
   TG["tweenX"].removeEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
   TG.out=!TG.out?true:false
   TG.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
  }
  private function getDarkColor(color:uint):uint {
   var r:uint=color >> 16 & 0xFF / 1.3;
   var g:uint=color >> 8 & 0xFF / 1.3;
   var b:uint=color & 0xFF /1.1;
   return r << 16 | g << 8 | b;
  }
  private function getRPoint(x0:Number,y0:Number,a:Number,b:Number,r:Number):Object {
   r=r * Math.PI / 180;
   return {x:Math.cos(r) * a + x0,y:Math.sin(r) * b + y0};
  }
  public function get contain():Object {
   return __contain;
  }
  public function clearAll():void {//清除内容
   var len:uint=_dataList.length;
   for (var j:uint=0; j<len; j++) {
    removeChild(__contain[DrawPieGraph.PIE_NAME+j]);
    __contain[DrawPieGraph.PIE_NAME+j]=null;
   
   }
  }
}
}

源文件:画饼
效果:http://space.flash8.net/bbs/attachment.php?aid=329983

 
2.游戏寻路(组件)

Title
import CYPL.utils.FindPath
var w:uint=50;
var h:uint=50;//地图的行列,这里为50行,50列
function createMap():Array{//创建地图
var map:Array=[]
for (var iy:uint = 0; iy<h; iy++) {
  map [iy] = [];
  for (var ix:uint = 0; ix<w; ix++) {
   map [iy][ix] =Math.random()<.2?1:0
   //建立0,1地图,0表示可以行动的,1表示障碍
  }
}
return map
}
var timer:uint=getTimer()
var p:Array=createMap()
var fp:FindPath=new FindPath(p);
var pathList:Array=fp.getPath4(new Point(0,0),new Point(49,49))
trace("耗时:",getTimer()-timer,"ms")
trace(pathList)//获取的路径格式[new Point(x,y),new Point(x,y),new Point(x,y)...],自己看着用吧!
//pathList为null表示是条死路

源文件:附件:寻路组件
效果:http://space.flash8.net/bbs/attachment.php?aid=334517


3.BitmapData抠图
Titlepackage {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.geom.*;
import flash.filters.*;
/**
  * @author CYPL
  * 设置图片元件实例名为Image
  */
public class CutImageTest extends Sprite {
  private var _imageBitmapData : BitmapData;
  private var _imageHotAreaData:BitmapData;
  private var _imageBitmap : Bitmap;
  private var _mouseRectContainer:Sprite;
  private var _mouseRectStartX:Number;
  private var _mouseRectStartY:Number;
  private var _imageClipDraging:Boolean;
  private var _currentDragClip:Sprite;
  public function CutImageTest() {
   
   _mouseRectContainer=new Sprite;
   Image.visible=false;
   _imageBitmapData=new BitmapData(Image.width,Image.height,true,0),_imageBitmapData.draw(Image);
   _imageBitmap=Bitmap(addChild(new Bitmap(_imageBitmapData)))
   _imageBitmap.x=30
   _imageBitmap.y=30
   configMouseEvent();
   //----------hitTestArea------------------------
   var c:ColorTransform=new ColorTransform;
   c.color=0xff0000;
   _imageHotAreaData=_imageBitmapData.clone();
   _imageHotAreaData.draw(_imageHotAreaData,null,c);
  }
  private function configMouseEvent():void {
   stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler,false,0,true);
   stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,false,0,true);
  }
  /**************************drawRect handler*******************************/
  private function mouseDownHandler(evt:MouseEvent):void {//mouse_down
   if (_imageClipDraging) {
    return;
   }
   addChild(_mouseRectContainer);
   _mouseRectStartX=evt.stageX;
   _mouseRectStartY=evt.stageY;
   stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
  }
  private function mouseUpHandler(evt:MouseEvent):void {//mouse_up
   
   //_currentDragClip&&();
   _imageClipDraging&&(_currentDragClip.stopDrag(),_imageClipDraging=false,_currentDragClip.alpha=1)||(cutImage(checkIntersection()),_mouseRectContainer.graphics.clear(),stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler))
   
  }
  private function mouseMoveHandler(evt:MouseEvent):void {//mouse_move
   evt.updateAfterEvent();
   var minX:Number=Math.min(evt.stageX,_mouseRectStartX)
   var minY:Number=Math.min(evt.stageY,_mouseRectStartY)
   var maxX:Number=Math.max(evt.stageX,_mouseRectStartX)
   var maxY:Number=Math.max(evt.stageY,_mouseRectStartY)
with(_mouseRectContainer.graphics){
   clear();
   lineStyle(0);
   beginFill(0xffff00,.5);
   drawRect(0,0,maxX-minX,maxY-minY);}
   _mouseRectContainer.x=minX;
   _mouseRectContainer.y=minY;
  }
  /************************************************************************/
  /**************************drag  handler*******************************/
  private function clipMouseDownHandler(evt:MouseEvent):void {//mouse_down
   var target:Sprite=evt.target as Sprite;
   _currentDragClip=target;
   _currentDragClip.alpha=.5;
   _imageClipDraging=true;
   addChild(target);
   _currentDragClip.startDrag(false);
  }
  /************************************************************************/
  private function checkIntersection():Rectangle {
   var intersectRect:Rectangle=_imageBitmapData.rect.intersection(new Rectangle(_mouseRectContainer.x-_imageBitmap.x,_mouseRectContainer.y-_imageBitmap.y,_mouseRectContainer.width,_mouseRectContainer.height));
   trace("与源图BitmapData相交范围:"+intersectRect);
   if (intersectRect.width==0 || intersectRect.height==0) {
    return null;
   }
   var bitmapData:BitmapData=new BitmapData(intersectRect.width,intersectRect.height,true,0);
   bitmapData.draw(_imageHotAreaData,new Matrix(1,0,0,1,-intersectRect.x,-intersectRect.y),null,null,new Rectangle(0,0,intersectRect.width,intersectRect.height));
   var intersectHotAreaRect:Rectangle=bitmapData.getColorBoundsRect(0xFFFF0000, 0xFFFF0000,true);
   trace("最终切图块的范围:"+intersectHotAreaRect);
   if (intersectHotAreaRect.width==0 || intersectHotAreaRect.height==0) {
   
   
    return null;
   }
   //扩展范围避免误差
   intersectHotAreaRect.x-=1
   intersectHotAreaRect.y-=1
   intersectHotAreaRect.width+=2
   intersectHotAreaRect.height+=2
   return intersectHotAreaRect;
  }
  private function cutImage(rect:Rectangle):void {//关键的切图部分
   if (!rect) {
    return;
   }
   var clipBitmapData:BitmapData=new BitmapData(rect.width,rect.height,true,0);
   var cliptX:Number=(_mouseRectContainer.x=_mouseRectContainer.x<_imageBitmap.x?0:_mouseRectContainer.x-_imageBitmap.x)+rect.x;
   var cliptY:Number=(_mouseRectContainer.y=_mouseRectContainer.y<_imageBitmap.y?0:_mouseRectContainer.y-_imageBitmap.y)+rect.y;
   clipBitmapData.draw(_imageBitmapData,new Matrix(1,0,0,1,-cliptX,-cliptY),null,null,new Rectangle(0,0,rect.width,rect.height));//intersectHotAreaRect)
   var clipBitmap:Bitmap=new Bitmap(clipBitmapData);
   clipBitmap.filters=[new GlowFilter(0,1,2,2,10,1)];
   var sprite:Sprite=new Sprite
   with(sprite.graphics){
   lineStyle(0);
   lineTo(rect.width,0);
   lineTo(rect.width,rect.height);
   lineTo(0,rect.height);
   lineTo(0,0);}
   sprite.x=_mouseRectContainer.x+rect.x+_imageBitmap.x
   sprite.y=_mouseRectContainer.y+rect.y+_imageBitmap.y
   sprite.addEventListener(MouseEvent.MOUSE_DOWN,clipMouseDownHandler);
   Sprite(addChild(sprite)).addChild(clipBitmap)
   var fillRect:Rectangle=new Rectangle(sprite.x-_imageBitmap.x,sprite.y-_imageBitmap.y,rect.width,rect.height);
   _imageBitmapData.fillRect(fillRect,0);
   _imageHotAreaData.fillRect(fillRect,0);
   
  }
}
}

源文件:附件:切图
效果:http://space.flash8.net/bbs/attachment.php?aid=343893


posted on 2008-03-28 19:20  i'am sl  阅读(254)  评论(1)    收藏  举报