情况如下。我在cs5.5中为一个项目和论坛页面创建了一个flash网站我想将背景图像分成随机片段,然后加载下一帧(在CS3中有一个时间轴效果来做到这一点但是被cs4 +删除)。我找到了AS2脚本来爆炸图像(使用Tweener.as V1.33(AS2))但是有谁知道如何让它与AS3一起工作?感谢
代码如下:
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import caurina.transitions.Tweener;
//
var container:MovieClip = this.createEmptyMovieClip("container_mc", this.getNextHighestDepth());
var bmp:BitmapData = BitmapData.loadBitmap("careca");
var grid:Number = 20;
var rect:MovieClip;
var depth:MovieClip = this;
var spacement:Number = 0;
var count:Number = 0;
var rows:Number = 0;
var a:Number, b:Number, c:Number, d:Number;
var rects:MovieClip = depth.createEmptyMovieClip("rects_mc", depth.getNextHighestDepth());
var pieces:Array = new Array();
//
container.attachBitmap(bmp, container.getNextHighestDepth());
container._visible = false;
//
function init() {
create();
}
function randRange(min:Number, max:Number) {
var randomNum:Number = Math.round(Math.random()*(max-min+1)+(min-.5));
return randomNum;
}
function clearBitmaps() {
rects.swapDepths(0);
rects.removeMovieClip();
}
function create() {
for (a=1; a<=Math.round(container._height/grid); a++) {
drawLine();
rows++;
}
rects._x = Stage.width/2-rects._width/2;
rects._y = Stage.height/2-rects._height/2;
}
function drawLine() {
for (b=0; b<Math.round(container._width/grid); b++) {
rect = rects.createEmptyMovieClip("rect"+String(rows)+String(b)+"_mc", rects.getNextHighestDepth());
bmp[i] = new BitmapData(grid, grid, true);
//
bmp[i].copyPixels(bmp, new Rectangle(grid*b, grid*rows, grid, grid), new Point(0, 0));
rect.attachBitmap(bmp[i], rect.getNextHighestDepth());
rect.initX = (rect._width+spacement)*b;
rect.initY = (rect._height+spacement)*rows;
rect.randomX = randRange(-Stage.width, Stage.width);
rect.randomY = randRange(-Stage.height, Stage.height);
rect.randomRotation = randRange(10, 360);
rect.randomScale = randRange(0, 100);
rect.randomAlpha = 0;
rect.cacheAsBitmap = true;
rect._x = rect.initX;
rect._y = rect.initY;
//
pieces.push(rect);
}
setTimeout(animPieces, 1000);
}
function animPieces() {
for (c=0; c<pieces.length; c++) {
rect = pieces[c];
Tweener.addTween(rect, {_scale:rect.randomScale, _rotation:rect.randomRotation, _x:rect.randomX, _y:rect.randomY, _alpha:0, time:5, transition:"easeOutExpo", onComplete:clearBitmaps});
}
}
//
init()
资料来源:Lemlinh.com
答案 0 :(得分:0)
老实说,代码看起来非常友好。当然,你需要进行修改,但总的来说你不应该有问题。
首先,这将删除属性中的所有下划线(例如,从_x到x)。 此外,如果您有一个返回值的函数,您必须声明它返回的变量类型,即。 String,Number,Boolean ....
所以,你的范围函数看起来像这样:
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.round(Math.random()*(max-min+1)+(min-.5));
return randomNum;
}
下载Tweener的AS3版本或查看TweenMax:http://www.greensock.com/tweenmax,只需将Tweener代码替换为TweenMax即可。很容易做到。
从:
Tweener.addTween(rect, {_scale:rect.randomScale, _rotation:rect.randomRotation, _x:rect.randomX, _y:rect.randomY, _alpha:0, time:5, transition:"easeOutExpo", onComplete:clearBitmaps});
为:
TweenMax.to(rect, 5, { scaleX:rect.randomScale, scaleY:rect.randomScale, rotation:rect.randomRotation, x:rect.randomX, y:rect.randomY, alpha:0, ease: Sine.easeOut, onComplete:clearBitmaps});
试试吧。应该比你想象的要容易;)如果你遇到困难或有问题,请开火!