为了您能够顺利交换,你需要在你的屏幕上,这是不符合正品的情况下在两个帧的Flash帧。平滑过渡通过ENTER_FRAME
处理程序进行动画处理,可能隐藏实际的帧更改过程。所以,为了平滑过渡,您需要将一帧的图片移动到左侧,而另一帧从右侧移动而不是简单的nextFrame()
。假设你有一个60fpa的舞台,并尝试平滑过渡。您将需要两个屏幕大小的对象,一个描绘当前帧和一个要显示的帧,随时可以显示为单个过渡。举例:
var transition:Sprite;
var bitmaps:Array;
var leftSide:Bitmap
var rightSide:Bitmap;
// initialization code, best placed in constructor
leftSide=new Bitmap();
rightSide=new Bitmap();
bitmaps=[];
transition=new Sprite();
transition.addChild(leftSide);
transition.addChild(rightSide);
rightSide.x=stage.stageWidth; //left side and right side should be aside each other
这是所需结构的声明。计划将显示transition
,给它两个Bitmap
s,它们将链接到两个不同的BitmapData
对象,该对象将保存新帧和旧帧的图片。我们将在当前帧的位图数据上绘制当前帧,然后获取存储的下一帧位图数据和do过渡。
function swipeHandler((event:TransformGestureEvent):void {
var doSwitch:Boolean=false;
var targetFrame:int=currentFrame;
switch(event.offsetX) {
// swiped right
case 1: {
if (currentFrame>2) {
// let's say we're not allowed to swipe right from frame 2
targetframe=currentFrame-1;
doSwitch=true;
}
break;
}
// swiped left
case -1: {
if(currentFrame < 10) {
targetFrame=currentFrame+1;
doSwitch=true;
}
break;
}
}
if (!doSwitch) return;
// prepare transition
if (!bitmaps[targetFrame]) bitmaps[targetFrame]=new BitmapData(stage.stageWidth,stage.stageHeight,false,0xffffff);
//^make a new bitmap if there's none for target frame
if (!bitmaps[currentFrame]) bitmaps[currentFrame]=new BitmapData(stage.stageWidth,stage.stageHeight,false,0xffffff);
// the same for source frame
bitmaps[currentFrame].fillRect(bitmaps[currentFrame].rect,0xffffff);
bitmaps[currentFrame].draw(stage); // draw current frame on the bitmap
// with this and stored bitmaps, old frame would remain drawn on the cached bitmap
// and able to be used as a transition image
if (targetFrame>currentFrame) {
leftSide.bitmapData=bitmaps[currentFrame];
rightSide.bitmapData=bitmaps[targetFrame];
transition.x=0;
// here is the place to initialize TweenMax tween to move "transition"
// and don't forget to removeChild(transition) at the end of the tween
} else {
rightSide.bitmapData=bitmaps[currentFrame];
leftSide.bitmapData=bitmaps[targetFrame];
transition.x=-1*stage.stageWidth;
// same here for tweening
}
stage.addChild(transition);
gotoAndStop(targetFrame);
}
这会将准备好的transition
对象在屏幕上的所有标的项目以上,有效地掩蔽确切帧交换机,通过gotoAndStop()
呼叫完成。此对象的x
坐标可以在之后进行补间,并且一旦补间完成,对象应从舞台上移除。
希望这会有所帮助。