2015-05-21 2 views
2

Я создал приложение для Android as3, в котором я использовал салфетку для перехода к следующему кадру и предыдущему кадру. но я хочу, когда я перехожу к следующему или предыдущему кадру, он плавно перебирается. Я пытался использовать твинг-макс, но он не работает. Я обнаружил, что плагины-твины всегда работают для клипов. Так как я могу сделать салфетку гладкой. Я делаю ее гладкой без анимации движения плагинов? вот мой код ....жестом салфетки не является гладким для кадрового прыжка

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; 
     } 
     } 
    } 
} 

ответ

1

для того, чтобы вы, чтобы быть в состоянии сгладить своп вам нужно иметь оба кадра на экране, что не так с подлинным Флэш-рамки. Плавные переходы анимируются с помощью обработчиков 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, которые будут содержать фотографии нового кадра и старого кадра. Мы нарисуем наш текущий фрейм на битмапдате текущего кадра, затем возьмем сохраненные данные растрового изображения следующего кадра и сделаем переход.

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 может быть затем прокручена вперед, и объект должен быть удален со сцены после того, как будет показана анимация.

Надеюсь, это поможет.

Смежные вопросы