as3.0对图片进行不规则切割源代码实例

import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.GlowFilter;
import flash.filters.DropShadowFilter;
import flash.display.Bitmap;
import flash.display.MovieClip;
 
//拖动拼图 数组
var spArray: Array = new Array();
//被触碰拼图 对象
var hit_Object: Object = {};
var rows, cols, w, h, i, j, m, n: Number;
var filterArray: Array = new Array();
//当前拖动的拼图块
var nowDrag_mc:MovieClip;
//定义行数列数
rows = 8;
cols = 8;
//画曲线的重要参数,curWidth为贝塞尔曲线的参数
var curWidth: Number;
var ellipseA: Number;
var ellipseB: Number;
 
 
//加载外部图片
var url = new URLRequest("1.jpg");
var _loader = new Loader();
_loader.load(url);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoad);
 
//定义滤镜
var color1: Number = 0x33CCFF;
var alp1: Number = 0.8;
var blurX1: Number = 2;
var blurY1: Number = 2;
var strength1: Number = 2;
var quality1: Number = 3;
var inner1: Boolean = false;
var knockout1: Boolean = false;
var filter1: GlowFilter = new GlowFilter(color, alp1, blurX1, blurY1, strength1, quality1, inner1, knockout1);
filterArray.push(filter1);
 
var splArray: Array = new Array();
var distance: Number = 3;
var angleInDegrees: Number = 3;
var color: Number = 0x000033;
var alp: Number = 0.8;
var blurX: Number = 3;
var blurY: Number = 3;
var strength: Number = 1;
var quality: Number = 3;
var inner: Boolean = false;
var knockout: Boolean = false;
var hideObject: Boolean = false;
var filter: DropShadowFilter = new DropShadowFilter(distance, angleInDegrees, color, alp, blurX, blurY, strength, quality, inner, knockout, hideObject);
filterArray.push(filter);
 
//对每个格子的形状初始化,如果left, right, up, down全部为true表示四面有填充的椭圆
for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
        //var ms: MySplit = new MySplit(i, j);
 
        var ms={row:i,col:j};
        //首先调用随机数,确认本格右方和下方是否填充
        m = int(Math.random() * 2);
        n = int(Math.random() * 2);
        if (m == 1 && j < cols - 1) {
            ms.right = true;
        }
        if (n == 1 && i < rows - 1) {
            ms.down = true;
        }
        //cuplayer.com检测本格左方是否需要填充
        if (j > 0 && !splArray[i * cols + j - 1].right) {
            ms.left = true;
        }
        //cuplayer.com检测本格上方是否需要填充
        if (i > 0 && !splArray[(i - 1) * cols + j].down) {
            ms.up = true;
        }
        splArray.push(ms);
    }
}
 
//cuplayer.com主处理函数
function onImgLoad(event: Event): void {
     
    var bitmap: BitmapData = new BitmapData(_loader.width, _loader.height);
    w = _loader.width / rows;
    curWidth = w / (cols-1);
    h = _loader.height / cols;
    //ellipseA始终较大,这样可以适应竖着或横着的椭圆
    ellipseA = h > w ? h / rows : w / rows;
    ellipseB = h < w ? h / cols : w / cols;
     
     
     
    var sampleSprite: MovieClip ;
    //cuplayer.com逐个分割图片
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            bitmap.draw(_loader);
            sampleSprite= new MovieClip();
            sampleSprite.graphics.lineStyle();
            sampleSprite.graphics.beginBitmapFill(bitmap);
            myDraw(sampleSprite, splArray[i * cols + j]);
            sampleSprite.graphics.endFill();
            if (w * rows > 1000) {
                sampleSprite.scaleX = 1000 / (w * rows);
                sampleSprite.scaleY = 1000 / (w * rows)
            }
            sampleSprite.x = 2 * j;
            sampleSprite.y = 2 * i;
            //标识每块的唯一性 用来检测碰撞
            sampleSprite.id=i.toString()+j.toString();
            dragContainer_mc.addChild(sampleSprite);
            sampleSprite.filters = filterArray;
            spArray.push(sampleSprite);
            sampleSprite.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
             
        }
    }
     
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            bitmap.draw(_loader);
            sampleSprite = new MovieClip();
            sampleSprite.graphics.lineStyle();
            sampleSprite.graphics.beginBitmapFill(bitmap);
            myDraw(sampleSprite, splArray[i * cols + j]);
            sampleSprite.graphics.endFill();
            if (w * rows > 1000) {
                sampleSprite.scaleX = 1000 / (w * rows);
                sampleSprite.scaleY = 1000 / (w * rows)
            }
            sampleSprite.x = 2 * j;
            sampleSprite.y = 2 * i;
            hitContainer_mc.addChild(sampleSprite);
            sampleSprite.filters = filterArray;    
            //标识每块的唯一性 用来检测碰撞
            hit_Object[i.toString()+j.toString()]=sampleSprite;
             
        }
    }
    //被碰撞的拼图
    hitContainer_mc.alpha=0;
     
     
    //原图
    var bitmap_yuantu: BitmapData = new BitmapData(_loader.width, _loader.height);
    bitmap_yuantu.draw(_loader);
    var bitmap_yuantuBM=new Bitmap(bitmap_yuantu);
    var scaleNum=2 * cols/bitmap_yuantuBM.width+1;
    bitmap_yuantuBM.scaleX =scaleNum;
    bitmap_yuantuBM.scaleY =scaleNum;
    yuantuContainer_mc.addChild(bitmap_yuantuBM);
    bitmap_yuantuBM.filters = filterArray;
     
}
//cuplayer.com画图函数
function myDraw(sprite: Sprite, ms: Object) {
    i = ms.row;
    j = ms.col;
    sprite.graphics.drawRoundRect(j * w, i * h, w, h, 5, 5);
    if (ms.right) {
        sprite.graphics.moveTo(w * (j + 1), i * h);
        sprite.graphics.curveTo(w * (j + 1) - curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
        sprite.graphics.drawEllipse(w * (j + 1) - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
    } else if (j < (cols-1)) {
        sprite.graphics.moveTo(w * (j + 1), i * h);
        sprite.graphics.curveTo(w * (j + 1) + curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
        sprite.graphics.drawEllipse(w * (j + 1) + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
    }
    if (ms.left) {
        sprite.graphics.moveTo(w * j, i * h);
        sprite.graphics.curveTo(w * j + curWidth, i * h + h / 2, w * j, (i + 1) * h);
        sprite.graphics.drawEllipse(w * j + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
    } else if (j > 0) {
        sprite.graphics.drawEllipse(w * j - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
        sprite.graphics.moveTo(w * j, i * h);
        sprite.graphics.curveTo(w * j - curWidth, i * h + h / 2, w * j, (i + 1) * h);
    }
    if (ms.down) {
        sprite.graphics.moveTo(w * j, (i + 1) * h);
        sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h - curWidth, (j + 1) * w, (i + 1) * h);
        sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h - 0.5 * curWidth, ellipseA, ellipseB);
    } else if (i < (cols-1)) {
        sprite.graphics.moveTo(w * j, (i + 1) * h);
        sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h + curWidth, (j + 1) * w, (i + 1) * h);
        sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
    }
    if (ms.up) {
        sprite.graphics.moveTo(w * j, i * h);
        sprite.graphics.curveTo(w * j + 0.5 * w, i * h + curWidth, (j + 1) * w, i * h);
        sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
    } else if (i > 0) {
        sprite.graphics.moveTo(w * j, i * h);
        sprite.graphics.curveTo(w * j + 0.5 * w, i * h - curWidth, (j + 1) * w, i * h);
        sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h - 0.5 * curWidth, ellipseA, ellipseB);
    }
}
 
//cuplayer.com拖曳处理函数
function onDown(e: MouseEvent) {
    //获取当前被拖动 的对象
    nowDrag_mc=MovieClip(e.currentTarget);
    nowDrag_mc.startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
}
function onUp(e: MouseEvent) {
    stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
    nowDrag_mc.stopDrag();
}
转载自:https://www.cnblogs.com/dt1991/p/12560351.html

  

原文地址:https://www.cnblogs.com/fengziwu/p/15012162.html