📄 puzzledocument.as
字号:
package{
import flash.display.*;
import flash.text.TextField;
import flash.events.*;
import flash.ui.Mouse;
import flash.geom.*;
public class PuzzleDocument extends MovieClip{
//声明变量
//各行各列拼图数量
public var col:uint;
//拼图数量总数
public var totalTiles:uint;
//画布矩形
public var rectCanvas:Rectangle;
//临时堆放拼图的矩形
public var rectTemp:Rectangle;
//拼图碎皮宽度
public var tileWidth:Number;
//拼图高度
public var tileHeight:Number;
//碎皮数组
public var aTiles:Array=[];
//拼图位图数据
public var bmpData:BitmapData;
//拼图位图
public var bmpMap:Bitmap;
//存放位图和拼图碎皮的工作区
public var scene:Sprite=new Sprite();
//存放拼图分割线的Sprite对象
public var lineSprite:Sprite;
//构造函数
public function PuzzleDocument(){
col=4;
rectCanvas=new Rectangle(5,15,360,360);
rectTemp=new Rectangle(375,15,180,360);
//设置拼图数量的文本框
txtTileNum.text=col+"X"+col;
mc.stop();
scene=new Sprite();
addChild(scene);
swapChildren(mc,mcGameInfo);
//交换工作区和游戏信息的深度
swapChildren(scene,mcGameInfo);
bmpData=new BitmapData(mc.width,mc.height);
//把影片剪辑当前帧的图像作为拼图的位图数据
bmpData.draw(mc,new Matrix());
//使用位图数据创建位图对像
bmpMap=new Bitmap(bmpData);
bmpMap.x=rectCanvas.x;
bmpMap.y=rectCanvas.y;
//添加到显示列表
scene.addChild(bmpMap);
//添加 按钮的侦听器
this.btnStart.addEventListener(MouseEvent.CLICK,btnStart_ClickHandler);
this.btnReplay.addEventListener(MouseEvent.CLICK,btnReplay_ClickHandler);
this.btnPlus.addEventListener(MouseEvent.CLICK,btnPlus_ClickHandler);
this.btnMinus.addEventListener(MouseEvent.CLICK,btnMinus_ClickHandler);
}
//清除所有拼图碎皮
private function clearTiles():void{
for(var i:uint=0;i<aTiles.length;i++){
scene.removeChild(aTiles[i]);
}
aTiles=[];
}
//初始化拼图分割线
private function initArea():void{
lineSprite=new Sprite();
lineSprite.graphics.lineStyle(1,0x000000,.2);
for(var i:uint=0;i<col-1;i++){
//横向分割
lineSprite.graphics.moveTo(rectCanvas.x,rectCanvas.y+tileHeight*(i+1));
lineSprite.graphics.lineTo(rectCanvas.x+rectCanvas.width,rectCanvas.y+tileHeight*(i+1));
//纵向分隔
lineSprite.graphics.moveTo(rectCanvas.x+tileWidth*(i+1),rectCanvas.y);
lineSprite.graphics.lineTo(rectCanvas.x+tileWidth*(i+1),rectCanvas.y+rectCanvas.height);
}
addChild(lineSprite);
}
//初始化拼图碎皮
private function initTiles():void{
//隐藏原始图层
bmpMap.visible=false;
clearTiles();
for(var i:uint=0;i<col;i++){
for(var j:uint=0;j<col;j++){
var tile:Tile=new Tile(tileWidth,tileHeight);
//从位图数据复制相应的像素到拼图碎片
tile.bmpTile.bitmapData.copyPixels(bmpData,new Rectangle(j*tileWidth,i*tileHeight,tileWidth,tileHeight),new Point(0,0));
//拼图碎片序列
tile.index=i*col+j;
//碎片可托拽
tile.dragable=true;
//碎片放置在临时区域
tile.x=rectTemp.x+(rectTemp.width-tileWidth)*Math.random();
tile.y=rectTemp.y+(rectTemp.height-tileHeight)*Math.random();
//添加碎片的托拽事件
tile.addEventListener(MouseEvent.MOUSE_DOWN,dragTile,false);
tile.addEventListener(MouseEvent.MOUSE_UP,stopDragTile,false);
//添加到数组
aTiles.push(tile);
scene.addChild(tile);
}
}
}
///////////////开始游戏 按钮方法
private function btnStart_ClickHandler(e:MouseEvent):void{
tileWidth=rectCanvas.width/col;
tileHeight=rectCanvas.height/col;
totalTiles=col*col;
mc.visible=false;
mcGameInfo.visible=false;
btnStart.visible=false;
btnReplay.visible=true;
initArea();
//初始化碎片
initTiles();
}
////再玩一遍 按钮方法
private function btnReplay_ClickHandler(e:MouseEvent):void{
mc.visible=true;
mcGameInfo.visible=false;
mc.gotoAndStop(Math.ceil(Math.random()*mc.totalFrames));
removeChild(lineSprite);
bmpData=null;
bmpData=new BitmapData(mc.width,mc.height);
bmpData.draw(mc,new Matrix());
bmpMap.bitmapData.copyPixels(bmpData,new Rectangle(0,0,rectCanvas.width,rectCanvas.height),new Point(0,0));
bmpMap.visible=true;
btnStart.visible=true;
btnReplay.visible=false;
clearTiles();
}
///添加按钮 方法
private function btnPlus_ClickHandler(e:MouseEvent):void{
if(col<8) col++;
txtTileNum.text=col+"X"+col;
}
//减少按钮 方法
private function btnMinus_ClickHandler(e:MouseEvent):void{
if(col>3) col--;
txtTileNum.text=col+"X"+col;
}
//托拽
private function dragTile(e:MouseEvent):void{
var tile:Tile=Tile(e.currentTarget);
if(tile.dragable){
scene.setChildIndex(tile,scene.numChildren-1);
tile.startDrag();
}
}
//停止托拽
private function stopDragTile(e:MouseEvent):void{
var tile:Tile=Tile(e.currentTarget);
tile.stopDrag();
var targetX:Number=tile.index%col*tileWidth+tileWidth/2+rectCanvas.x;
var targetY:Number=Math.floor(tile.index/col)*tileHeight+tileHeight/2+rectCanvas.y;
var targetPoint:Point=new Point(targetX,targetY);
var mousePoint:Point=new Point(e.stageX,e.stageY);
if(Point.distance(mousePoint,targetPoint)<tileWidth/2){
if(!tile.dragable){
return;
}
tile.dragable=false;
scene.setChildIndex(tile,1);
tile.x=targetX-tileWidth/2;
tile.y=targetY-tileHeight/2;
totalTiles--;
if(totalTiles==0){
mcGameInfo.visible=true;
totalTiles=col*col;
mcGameInfo.gotoAndStop("Success");
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -