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