Кадр за кадром Твин переход с AS3 - PullRequest
1 голос
/ 13 августа 2011

У меня есть кнопка в «кадре 1», которая ведет к «кадру 2».Файл имеет простой код:

myButton.addEventListener(MouseEvent.CLICK, gotoFrame02);

function gotoFrame02(event:MouseEvent):void {
    gotoAndStop(2);
}

Проблема заключается в отсутствии перехода при смене кадра.Можно ли применить Tween-переход при смене кадра?

Ответы [ 3 ]

2 голосов
/ 11 ноября 2013

Вы можете легко взять bitmapData со сцены и убрать альфа, когда поместите в MovieClip.

Вот репозиторий Github, который я сделал:

https://github.com/Abrahamh08/Frame-Transitions-AS3

Fade.as, импортировать этот файл в папку com в папку videogamecheatsultra и затемнять кадры с функцией Fade.fadeIntoFrame():

package com.videogamecheatsultra
{
    import flash.display.Stage;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.events.Event;
    import flash.display.MovieClip;
    import flash.display.DisplayObject;

    /*
    This code fades a frame into the frame and/or Scene you define.

    Code by Cornelia Rose LLC (http://www.videogamecheatsultra.com)
    This file is not to be sold and not to be claimed as your file or your code.  Have a nice day!
    */
    public class Fade
    {
        public static function fadeIntoFrame(root, stage, frame:int, Scene:String = null, alphaPerFrame:Number = 0.05)
        {
            var data:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
            data.draw(stage);

            var stageData:Bitmap = new Bitmap;
            stageData.bitmapData = data;

            var stageClip:MovieClip = new MovieClip();
            stageClip.addChild(stageData);

            if(Scene != null)
            {
                MovieClip(root).gotoAndStop(frame, Scene);
            }else
            {
                MovieClip(root).gotoAndStop(frame);
            }

            stageClip.x = 0;
            stageClip.y = 0;

            stage.addChild(stageClip);

            var highIndex:int = stage.getChildIndex(stage.getChildAt(stage.numChildren - 1));
            stage.setChildIndex(stageClip, highIndex);

            stageClip.addEventListener(Event.ENTER_FRAME, fadeTo);

            function fadeTo(e:Event)
            {
                e.currentTarget.alpha -= alphaPerFrame;
                if(e.currentTarget.alpha <= 0)
                {
                    e.currentTarget.removeEventListener(Event.ENTER_FRAME, fadeTo);
                    e.currentTarget.parent.removeChild(e.currentTarget);
                }
            }
        }

    }

}
1 голос
/ 13 августа 2011

Это не совсем возможно, нет.Перемещение от одного кадра к другому с использованием временной шкалы делает именно это, и поскольку объекты на временной шкале (и их состояния) не доступны для кода, пока вы уже там, вы не можете легко смотреть вперед, чтобы создать анимацию движения.Я бы сказал, что у вас есть два варианта, хотя я не могу сказать, что лучше, не зная, что существует во втором кадре.

1.Анимация временной шкалы

Вместо использования gotoAndStop для перехода в совершенно другое состояние на кадре 2 используйте gotoAndPlay, а затем создайте желаемую анимацию между двумя состояниями, которые вы хотите начать с кадра 2.Поместите ключевой кадр в конце вашей анимации, содержащий stop().

2.Забудьте о временной шкале

ActionScript 3 ориентирован на объекты и работает лучше всего, когда вы освобождаетесь от временной шкалы.Создайте содержимое кадра 2 как символ в библиотеке и установите для этого символа значение «Экспорт для ActionScript».Теперь вы можете прикрепить этот символ и применить к нему кодированную анимацию при нажатии на кнопку.Для основанной на коде анимации я настоятельно рекомендую использовать бесплатную библиотеку TweenMax или TweenLite, если у вас есть проблемы с размером файла.Они очень просты в использовании, гораздо более эффективны и более функциональны, чем встроенные классы анимации.Вы также можете использовать TimelineMax , чтобы сгруппировать несколько анимаций вместе и управлять ими как группой.

Например:

import com.greensock.TweenMax;
import com.greensock.TimelineMax;

myButton.addEventListener(MouseEvent.CLICK, gotoFrame02);

var frame2State:Frame2State;

function gotoFrame02(event:MouseEvent):void 
{
    //remove listener for memory management purposes
    myButton.removeEventListener(MouseEvent.CLICK, gotoFrame02);
    //create instance of your next state from the library
    frame2State = new Frame2State();  //assuming that the class name you set for the symbol is Frame2State
    addChild(frame2State);
    //create timeline
    var timeline:TimelineMax = new TimelineMax({onComplete:onTimelineComplete});
    //add button fade down animation
    timeline.append(new TweenMax(myButton,0.4,{alpha:0}));
    //add content fade up animation
    timeline.append(new TweenMax(frame2State,0.4,{alpha:1}));
    timeline.play();
}

function onTimelineComplete():void
{
    //remove button
    removeChild(myButton);
    myButton = null;
}
1 голос
/ 13 августа 2011

frame1:

stop();
myButton.addEventListener(MouseEvent.CLICK, gotoFrame02);
function gotoFrame02(event:MouseEvent):void {
    gotoAndStop(2);
}

frame2:

stop();
import fl.transitions.Tween;
import fl.transitions.easing.*;
var myTween:Tween = new Tween(myButton, "x", Elastic.easeOut, 0, 300, 3, true);

см. Эту ссылку для получения дополнительной информации. http://www.zedia.net/actionscript-3-tweens-tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...