我已经制作了一个as3 android应用程序,其中我使用了滑动手势来进行下一帧和前一帧。但我希望当我跳到下一帧或上一帧时,它会顺利滑动。我尝试使用tween max但它不起作用。我发现补间插件总是适用于电影剪辑。所以我怎样才能使滑动顺畅。可以我没有补间插件让它变得流畅?这是我的代码......
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, SwipeHandler);
function SwipeHandler(event:TransformGestureEvent):void
{
switch(event.offsetX)
{
// swiped right
case 1:
{
prevFrame();
break;
}
// swiped left
case -1:
{
if(currentFrame == 10)
{
stop();
}
else
{
nextFrame();
break;
}
}
}
}
答案 0 :(得分:1)
为了使您能够平滑交换,您需要在屏幕上同时拥有两个帧,而真正的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
,它们将链接到两个不同的BitmapData
对象,这些对象将保存新框架和旧框架的图片。我们将在当前帧的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
坐标可以在之后进行补间,并且一旦补间结束就应该从舞台中删除该对象。
希望这有帮助。