这段代码转自blueidea 的youxiazhu,拿到这里学习一下。
package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.geom.Matrix;
public class main extends Sprite {
private var loadPic:Loader;
private var num:uint;
private var subArr:Array;
private var offsetX:Number;
private var offsetY:Number;
private var draggedPic:Sprite;
public function main() {
num = 4;
subArr = new Array(num*num);
loadPic = new Loader();
var picPath:String = "image.jpg";
var url:URLRequest = new URLRequest(picPath);
loadPic.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
loadPic.load(url);
}
private function loaded(e:Event) {
loadPic.width = stage.stageWidth;
loadPic.height = stage.stageHeight;
stage.addChild(e.target.loader);//loadPic
stage.addEventListener(MouseEvent.CLICK,clicked);
}
private function clicked(e:MouseEvent) {
stage.removeEventListener(MouseEvent.CLICK,clicked);
loadPic.visible = false;
var w:Number = loadPic.width/num;
var h:Number = loadPic.height/num;
for (var i:uint; i<num; i++) {
for (var j:uint=0; j<num; j++) {
var bitmapSprite:Sprite = new Sprite();
var picData:BitmapData = new BitmapData(w,h);
var subPic:Bitmap = new Bitmap(picData);
var matrix:Matrix = new Matrix(1,0,0,1,-i*w,-j*h);
picData.draw(loadPic,matrix,null,null);
bitmapSprite.addChild(subPic);
subArr[j*num+i]=bitmapSprite;
bitmapSprite.x = (stage.stageWidth-w)*Math.random();
bitmapSprite.y = (stage.stageHeight-h)*Math.random();
bitmapSprite.addEventListener(MouseEvent.MOUSE_DOWN,downSubPic);
bitmapSprite.addEventListener(MouseEvent.MOUSE_UP,upSubPic);
stage.addChild(bitmapSprite);
}
}
}//end of function clicked
private function downSubPic(e:MouseEvent) {
draggedPic = Sprite(e.target);
offsetX = e.stageX - draggedPic.x;
offsetY = e.stageY - draggedPic.y;
stage.addChild(draggedPic);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveSubPic);
}
private function upSubPic(e:MouseEvent) {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, moveSubPic);
}
private function moveSubPic(e:MouseEvent) {
draggedPic.x = e.stageX - offsetX;
draggedPic.y = e.stageY - offsetY;
}
}
}
其实这段代码还没有做成游戏,只是把图拆了,然后可以拖放。
num = 4;
subArr = new Array(num*num);
这个很好理解,把图片要拆成的横竖的数量, 这里是4*4=16块小图片。
loadPic = new Loader();
这里的 new Loader 我容易把它当成是一种服务,而不是一种可显示对象,其实我想的服务是var url:URLRequest = new URLRequest(picPath) 这部分.在Cookbook中这样说:要在播放.swf的执行期间载入无不影像获影片时,就必须使用Loader类别。Loader和 flash.net.URLLoader很相似,都是用于载入,但是 Loader实体可以载入外部影像和影片将其显示在荧幕上,而URLLoader是用于传输资料。
var bitmapSprite:Sprite = new Sprite();
var picData:BitmapData = new BitmapData(w,h);
var subPic:Bitmap = new Bitmap(picData);
var matrix:Matrix = new Matrix(1,0,0,1,-i*w,-j*h);
picData.draw(loadPic,matrix,null,null);
这段代码比较感兴趣,因为之前都没有进行Bitmap方面的练习,所以有些陌生。
首先,要明白BitmapData是当Bitmap进行图像处理时需要的一个东西。
Martix也很陌生,什么东西呢?
Matrix 类表示一个转换矩阵,它确定如何将点从一个坐标空间映射到另一个坐标空间。 您可以对一个显示对象执行不同的图形转换,方法是设置 Matrix 对象的属性,将该 Matrix 对象应用于 Transform 对象的 matrix 属性,然后应用该 Transform 对象作为显示对象的 transform 属性。 这些转换函数包括平移(x 和 y 重新定位)、旋转、缩放和倾斜。
明白了吗?呵呵,我也不明白,什么右移的下移的,不明白。等待高手!
private function downSubPic(e:MouseEvent) {
draggedPic = Sprite(e.target);
offsetX = e.stageX - draggedPic.x;
offsetY = e.stageY - draggedPic.y;
stage.addChild(draggedPic);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveSubPic);
}
private function moveSubPic(e:MouseEvent) {
draggedPic.x = e.stageX - offsetX;
draggedPic.y = e.stageY - offsetY;
}
这一句是用来拖放图片的,为什么没用startDrog()呢?难道是效率执行的问题?
不过这的确是一种方法,看清楚这里的 e.stageX,习惯了2.0 xmouse ,一打眼怎么都不明白stageX(以为是stage的x坐标了)为什么会变化。
我把拖放那一部分改写了
package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.geom.Matrix;
public class main extends Sprite {
private var loadPic:Loader;
private var num:uint;
private var subArr:Array;
private var offsetX:Number;
private var offsetY:Number;
private var draggedPic:Sprite;
public function main() {
num = 4;
subArr = new Array(num*num);
loadPic = new Loader();
var picPath:String = "image.jpg";
var url:URLRequest = new URLRequest(picPath);
loadPic.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
loadPic.load(url);
}
private function loaded(e:Event) {
loadPic.width = stage.stageWidth;
loadPic.height = stage.stageHeight;
stage.addChild(e.target.loader);//loadPic
stage.addEventListener(MouseEvent.CLICK,clicked);
}
private function clicked(e:MouseEvent) {
stage.removeEventListener(MouseEvent.CLICK,clicked);
loadPic.visible = false;
var w:Number = loadPic.width/num;
var h:Number = loadPic.height/num;
for (var i:uint; i<num; i++) {
for (var j:uint=0; j<num; j++) {
var bitmapSprite:Sprite = new Sprite();
var picData:BitmapData = new BitmapData(w,h);
var subPic:Bitmap = new Bitmap(picData);
var matrix:Matrix = new Matrix(1,0,0,1,-i*w,-j*h);
picData.draw(loadPic,matrix,null,null);
bitmapSprite.addChild(subPic);
subArr[j*num+i]=bitmapSprite;
bitmapSprite.x = (stage.stageWidth-w)*Math.random();
bitmapSprite.y = (stage.stageHeight-h)*Math.random();
bitmapSprite.addEventListener(MouseEvent.MOUSE_DOWN,downSubPic);
bitmapSprite.addEventListener(MouseEvent.MOUSE_UP,upSubPic);
stage.addChild(bitmapSprite);
}
}
}//end of function clicked
private function downSubPic(e:MouseEvent) {
draggedPic = Sprite(e.target);
stage.addChild(draggedPic);
draggedPic.startDrag();
}
private function upSubPic(e:MouseEvent) {
e.target.stopDrag();
}
}
}
一个拼图游戏 (Actionscript 3.0)
最新推荐文章于 2022-09-21 13:11:04 发布