bitMap以及bitMapData的使用技巧,在flash里想要做动画做得炫,你就必须得熟知这两个玩意儿的用法,
而我们今天就来探讨其中的一种技巧:切图。
copyPixels(), 它的作用是把一个bitmapData整体中的一部分像素复制出来给另一个bitmapData,
这是一张256 * 256像素的图片,长度么应该是256 / 4 宽度也是 256 / 4
[Embed(source=
"
melee.png
")]
private
var resource:Class;
private
var displayBMP:Bitmap;
private
var displayBMPD:BitmapData;
private
var sourceBMPD:BitmapData;
private
var i:
int =
0;
public function Main()
{
sourceBMPD = (
new resource()
as Bitmap).bitmapData;
//
先拿到目标图像数据
displayBMP =
new Bitmap();
//
这是我们用来盛放切下来的图像数据并显示的东东哦
addChild( displayBMP );
displayBMPD =
new BitmapData(
64,
64);
//
切图开始
displayBMPD.copyPixels( sourceBMPD,
new Rectangle(
0,
0,
64,
64 ),
new Point(
0,
0 ) );
displayBMP.bitmapData = displayBMPD;
//
切下来的BitmapData必须放到已添加至舞台的bitmap中才能显示出来哦
}
我们现在想做一个动画咋办?这图片一行的四张图片看起来可以组成一个连贯的攻击动作,
那我们就试试看把这四个图片组成一个动画吧。
做动画之前我们先想想具体的思路是怎样的,
我们知道,一个位图bitmap的外观改变无非就是其内部的bitmapData发生了改变而已,
那我们就隔一阵子改变一下它的BitmapData好了,
不过使用enterFrame来改变的话动画会播放太快了,因为一般的swf帧频都有30多,
就是一秒播放30多帧,此时我们就需要推出一个新的计时器类:Timer。
[Embed(source=
"
melee.png
")]
private
var resource:Class;
private
var displayBMP:Bitmap;
private
var displayBMPD:BitmapData;
private
var sourceBMPD:BitmapData;
private
var i:
int =
0;
public function Main()
{
sourceBMPD = (
new resource()
as Bitmap).bitmapData;
displayBMP =
new Bitmap();
addChild( displayBMP );
var timer:Timer =
new Timer(
100);
//
限定计时器每100毫秒触发一次
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
//
启动计时器
}
private function timerHandler(
event:TimerEvent ):
void{
displayBMPD =
new BitmapData(
64,
64);
displayBMPD.copyPixels( sourceBMPD,
new Rectangle( i *
64,
0,
64,
64 ),
new Point(
0,
0 ) );
//
因为我们要切割的4张图片都在一行上,所以只需要改变切图的x位置即可
displayBMP.bitmapData = displayBMPD;
if(i==
3)i=
0;
//
若是当前所切图已到行尾最后一张图片,那就从行首第一张图片从新开始切过
else i++;
}