demo :: http://www.dreamnight.summerhost.info/explodeImage.swf
MY.jpg 是外部的照片连接名
源码::
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import com.greensock.TweenLite;
import flash.utils.ByteArray;
import flash.text.TextField
import flash.events.ProgressEvent
//import flash.geom.Rectangle;
//import flash.geom.Point;
/**
* ...
* @author dreamnight
* @ date 2010/3/12
*/
public class Main extends Sprite {
private var str:String;//外部照片的链接地址
private var bmp:Bitmap;//保存加载进来的的图片
private var cellWidth:Number;
private var cellHeight:Number;
private var smallImages:Array;
private var storePosition:Array;
private var container:Sprite;
private var showText:TextField
private var row:int;
private var column:int;
//判断是否发生click事件
private var isClick:Boolean;
public function Main():void {
if (stage) {
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, addToStage);
}
}
private function addToStage(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, addToStage);
init();
// entry point
}
private function init():void {
str="MY.jpg";
container = new Sprite();
addChild(container);
//让container处在中间
loadImage(str);
}
private function loadImage(str:String=""):void {
showText= new TextField();
var loader:Loader = new Loader();
var urlRequest:URLRequest=new URLRequest(str);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
loader.load(urlRequest);
}
private function onProgress(e:ProgressEvent){
var percent:int=int(e.bytesLoaded*100/e.bytesTotal);
showText.text="正在很努力的加载:"+String(percent) +"%";
showText.x=stage.stageWidth/2-showText.width/2
showText.y=stage.stageHeight/2-showText.height/2
showText.autoSize="left";
addChild(showText);
}
private function onComplete(e:Event):void {
trace(e.target.content);
bmp=Bitmap(e.target.content);
showText.text="";
showText=null
trace(bmp.width);
trace(bmp.height);
splite(30,25);//拆分相片 里面的参数必须要是 宽高比的倍数 这样才能将所有的图片显示出来
}
private function splite(rowWidth:int=30,columnHeight:int=25):void {
cellWidth=rowWidth;
cellHeight=columnHeight;
smallImages=[];
storePosition=[];
//爆破的个数 : row*column
row=Math.floor(bmp.width/cellWidth);//横向的个数
column=Math.floor(bmp.height/cellHeight);//列个数
trace(row);
trace(column);
for (var i:int = 0; i!=column; ++i) {
for (var j:int = 0; j != row; ++j) {
var cellBitmapData:BitmapData=new BitmapData(cellWidth,cellHeight);
var tx:Number=- cellWidth*i;
var ty:Number=- cellHeight*j;
var matrix:Matrix = new Matrix();
matrix.translate(tx ,ty );
cellBitmapData.draw(bmp,matrix);
//var rect:Rectangle = new Rectangle(i, j, cellWidth, cellHeight);
//cellcopyPixels
var bitmap:Bitmap=new Bitmap(cellBitmapData);
//对该照片进行复原
bitmap.x=- tx;
bitmap.y=- ty;
smallImages.push(bitmap);
//保存初始位置:
var oj:Object= new Object();
oj.x=- tx;
oj.y=- ty;
storePosition.push(oj);
//将其添加到容器中
container.addChild(bitmap);
trace("tx为:"+tx);
trace("ty为:"+ty);
//trace("源的X为"+bmp.x+"/nY为"+bmp.y);
}
}
container.x=stage.stageWidth/2-bmp.width/2;
container.y=stage.stageHeight/2-bmp.height/2;
//对数组ujinxing复制,以此来保存其初始X,y坐标
/*
var copy:ByteArray = new ByteArray();
copy.writeObject(smallImages);
copy.position = 0;
storePosition = copy.readObject()*/
//增加交换性
interactive();// 增加交互性
}
private function interactive():void {
isClick=false;
container.addEventListener(MouseEvent.CLICK, onClick,false,1,true);
}
private function onClick(e:MouseEvent):void {
if (isClick==true) {
isClick=false;
trace("yes");
//进行还原
for (var j:int = 0; j != row * column; ++j) {
//还原
TweenLite.to(smallImages[j],3,{x:storePosition[j].x,y:storePosition[j].y,z:0});
}
} else {
isClick=true;
trace("ok");
for (var i:int = 0; i != row * column; ++i) {
//
TweenLite.to(smallImages[i],5,{x:Math.random()*stage.stageWidth,y:Math.random()*stage.stageHeight,z:Math.random()>0.5?Math.random()*1000:-Math.random()*1000});
}
}
}
}
}