Hey!好久没来写东西了。今天来写一篇as2的文本点阵化。
关于文本点阵化,用到的是as2里内置的BitmapData类。思路是通过逐一取得文本中像素的点,记录下坐标值,然后动态添加圆点至舞台上,赋于他们数组里的坐标值。
我们先看看一个demo:
下面来讲一下制作过程:
新建一个flash,添加一个新的mc,链接名称为"mc",再添加一个mc,绘制6*6的圆点,连接名称为"yuan"。在舞台(0,0)处添加一个动态文本,名称为txt.
代码:
function wenben(neirong:String){
import flash.display.BitmapData; //导入BitmapData类.
txt.text=neirong; //获取文本内容
txt._visible=false; //设置它不可见
txt.autoSize=true; //设置它左边自动对齐
var bm:BitmapData = new BitmapData(200,100, false, 0xffffff); //新建一个BitmapData数据。具体数据请F1查看~~
bm.draw(txt);//BitmapData绘制这个TXT
var beishu=10;//设定要放大的倍数
//定义一个数组,通过逐一取点的方式取得文本里的像素值坐标值。乘以放大倍数后存入数组。
var Zuobiao:Array = new Array();
for (y=0; y<txt._height; y++) {
for (x=0; x<txt._width; x++) {
if (bm.getPixel(x, y) != 0xffffff) {
Zuobiao.push({x:x*beishu, y:y*beishu});
}
}
}
//============根据数组复制"点"===============
this.attachMovie("mc","mc",this.getNextHighestDepth(), {_x:0, _y:0});
for (var i = 0; i<Zuobiao.length; i++) {
var p = mc.attachMovie("yuan", "yuan"+i, i);
p.cacheAsBitmap = true;
p._x=Zuobiao[i].x;
p._y=Zuobiao[i].y;
}
}
wenben("suerry")
好了,有了这个思路后,再完善它就很容易了,我现在要让整体动画看起来更加动态。我将使用TweenLite类进行缓动。TweenLite的功能非常强强大,我现在只是用到了坐标的缓动。
function wenben(neirong:String){
import flash.display.BitmapData; //导入BitmapData类.
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
TweenPlugin.activate([TintPlugin]);
txt.text=neirong; //获取文本内容
txt._visible=false; //设置它不可见
txt.autoSize=true; //设置它左边自动对齐
var bm:BitmapData = new BitmapData(200,100, false, 0xffffff); //新建一个BitmapData数据。具体数据请F1查看~~
bm.draw(txt);//BitmapData绘制这个TXT
var beishu=10;//设定要放大的倍数
//定义一个数组,通过逐一取点的方式取得文本里的像素值坐标值。乘以放大倍数后存入数组。
var Zuobiao:Array = new Array();
for (y=0; y<txt._height; y++) {
for (x=0; x<txt._width; x++) {
if (bm.getPixel(x, y) != 0xffffff) {
Zuobiao.push({x:x*beishu, y:y*beishu});
}
}
}
//============根据数组复制"点"===============
this.attachMovie("mc","mc",this.getNextHighestDepth(), {_x:0, _y:0});
for (var i = 0; i<Zuobiao.length; i++) {
var p = mc.attachMovie("yuan", "yuan"+i, i);
p.cacheAsBitmap = true;
p._x = Math.random()*Stage.width-Math.random()*Stage.width
p._y = Math.random()*Stage.height-Math.random()*Stage.height
p.tox=Zuobiao[i].x;
p.toy=Zuobiao[i].y;
var speed = Math.random()*5
p._alpha=0
//利用Tween类,让每个"点"移动到他们的终点坐标
var myTween=TweenMax.to(p, speed, {_alpha:100,_x:p.tox,_y:p.toy,ease:Back.easeInOut});
}
}
wenben("suerry")