雪原xy 发表于 2019-2-28 10:50:02

显示对象小练习之五;(Bitmap及BitmapData并添加点击事件)

//显示对象小练习之五;(Bitmap及BitmapData)
//在上一个练习的基础上加个点击事件,让图片动起来;
package{
//导入基类和两个位图相关类;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
//导入和位图操作相关的两个类;
import flash.geom.Point;
import flash.geom.Rectangle;
//导入鼠标事件CLICK;
import flash.events.MouseEvent;
public class SampleBitMove extends Sprite{
//定义三个显示对象实例;
private var bit:Bitmap;
private var bpd:BitmapData;
private var sp:Sprite;
//定义两个数组,一个用来存放位图,一个用来存放容器;
private var bitArr:Array;
private var spArr:Array;
//定义一个图片变量(该图片已导入到库里);
private var pic:hh;
//构造函数中三个方法;
public function SampleBitMove():void{
//初始化实例;
init();
//切割位图;(五个参数:位图源,存放位图的数组,存放容器的数组,横块数,纵块数)
cutP(bpd,bitArr,spArr,3,3);
//trace(bitArr)
//移动图片;
addMoveP(sp,bitArr,spArr);
//把sp容器加载到舞台;
addChild(sp);
}
//移动图片方法;
private function addMoveP(ss:Sprite,bbA:Array,ssA:Array):void{
//让容器大小适应舞台;
ss.scaleX=this.stage.stageWidth/ss.width;
ss.scaleY=this.stage.stageHeight/ss.height;
//添加侦听器;
ssA.addEventListener(MouseEvent.CLICK,moveP);
//输出一句话,方便调试;
trace("请点击中间的图片!");
}
//侦听器;
private function moveP(e:MouseEvent):void{
//调整位图数组里元素的顺序;
bitArr.push(bitArr.shift());
//借助for循环,把新位图数组里的位图重新显示;
for(var i:int=0;i<bitArr.length;i++){
spArr.addChild(bitArr)
}
}
//切割位图的方法;
private function cutP(bitd:BitmapData,bitA:Array,spA:Array,_x:uint,_y:uint):void{
//定义一个变量,方便操作数组;
var k:int=0;
//把bitd实例复制出来,以防后面的操作改变原有内容;
var xbpd:BitmapData=bitd.clone();
//设置小块的宽高;
var _w:Number=xbpd.width/_x;
var _h:Number=xbpd.height/_y;
//用for循环,借助copyPixels方法切割位图;
for(var j:int=0;j<_y;j++){
for(var i:int=0;i<_x;i++){
//在循环体内定义变量,使变量的指向固定;
var ybpd:BitmapData=new BitmapData(_w,_h,false,0x009900);
//切割方法,三个参数:位图源,区域,目标位置;
ybpd.copyPixels(xbpd,new Rectangle(i*_w,j*_h,_w,_h),new Point(0,0));
//把复制的位图推送到位图数组;
bitA.push(new Bitmap(ybpd));
//在循环体内定义容器变量,让变量的指向固定;
var xsp:Sprite=new Sprite();
//用容器加载图片,方便操作该位图;
xsp.addChild(bitA);
//再用循环体外的容器加载容器并推送到容器数组,方便在循环体外操作位图;
spA.push(sp.addChild(xsp));
//调整容器数组里各元素的位置;
spA.x=i*(_w+5);
spA.y=j*(_h+5);
//变量k自加,保证遍历数组中所有元素;
k++;
}
}
//输出执行语句,方便调试;
trace("图片切割完成!");
}
//初始化实例函数;
private function init():void{
pic=new hh();
bpd=pic as BitmapData;
sp=new Sprite();
//初始化数组;
bitArr=[];
spArr=[];
//加载到舞台,方便查看;
/*bit=new Bitmap(bpd);
sp.addChild(bit)
addChild(sp);
*/}
}
}


attach://2030.swf

TKCB 发表于 2019-2-28 11:54:56

【11RIA 闪客社区,评分公示】:
是否有价值:一般(银子 +10贡献 +1)
是否原创:是(金子 +1)
是否翻译:否
如对自己的评分有疑问,则咨询版主、管理员等。

qiuhao 发表于 2019-3-18 10:40:55

看得懂代码,但是如果让我自己写就写不出来:dizzy:

ganggang_lantia 发表于 2019-3-18 12:23:43

不错不错,收藏一下

雪原xy 发表于 2019-3-19 06:25:18

ganggang_lantia 发表于 2019-3-18 12:23
不错不错,收藏一下

大家一起学习,才有劲头!!
页: [1]
查看完整版本: 显示对象小练习之五;(Bitmap及BitmapData并添加点击事件)

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)