Actionscript 3 在单独的类中指定转换

Actionscript 3 在单独的类中指定转换,actionscript-3,Actionscript 3,我有一个问题,但有点难以解释,所以如果不清楚,请随时发表评论 我有一个如下所示的函数: private function createContent(slideData:Object):void { if (slide){ removeChild(slide); } slide = new Slide(slideData); addChil

我有一个问题,但有点难以解释,所以如果不清楚,请随时发表评论

我有一个如下所示的函数:

private function createContent(slideData:Object):void 
        {
            if (slide){

                removeChild(slide);
            }
            slide  = new Slide(slideData);
                addChild(slide);

        }

现在,当我删除或添加一张幻灯片时,我希望它与转换一起出现,我希望创建一个单独的类,使用tweenlite将不同的转换放入其中。我该如何以最好的方式处理这个问题?总之,当我添加或删除一个子项时,transitions类被调用,它返回一个transition,幻灯片在添加或删除时被设置动画。

处理这个问题的一种方法是实现添加或删除幻灯片时可以调用的方法。我不确定使用特定类进行转换是否有帮助,但在任何情况下,都可以将转换对象作为参数传递给函数

您还可以添加条件,以防转换对象为null,幻灯片将被简单地添加或删除,并且不会调用Tweenlite

public function displaySlide(container:DisplayObjectContainer , 
                            transition:Object , show:Boolean):void
{
 //The show Boolean indicates if you add 
 //or remove the slide. If removing the slide
 //you'll need the value in the transitionComplete method
 this.show = show;

 if( show )
      container.addChild( this );

 //The duration value as a property of your transition Object
 TweenLite.to( this , transition.duration , transition );
}

public transitionComplete():void
{
  if( !show )
    this.parent.removeChild( this );

  dispatch( new Event ("Transition complete") );
}
然后您可以这样使用它:

 private function createContent(slideData:Object):void 
 {
        if (this.contains( slide )){

            slide.addEventListener( "Transition Complete" , completeHandler );
            slide.displaySlide( this , slideData , false );
        } 
 }

您可以按照如下示例进行处理:

您将创建Maindocument类、com.vincent.Slides和com.vincent.Slide

package
{
    import com.vincent.Slides;
    import flash.display.MovieClip;

    public class Main extends MovieClip
    {
        public function Main():void
        {
            init();

        }// end function

        private function init():void
        {
            var slides:Slides = new Slides(550, 400, [0xFF0000, 0x00FF00, 0x0000FF]);
            addChild(slides);

        }// end function

    }// end class

}// end package
在Main类中,您将导入Slides类并创建其实例。Slides类的参数是幻灯片的宽度、高度和颜色。在本例中,我使用颜色而不是加载内容来保持flash应用程序/电影的简单。最后,将幻灯片实例添加到舞台

package com.vincent
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Slides extends Sprite
    {
        private var _width:Number;
        private var _height:Number;
        private var _slideColors:Array;
        private var _slides:Array;
        private var _currentSlide:int = 1;
        private var _leftControl:Sprite;
        private var _rightControl:Sprite;
        private var _isSliding:Boolean;

        public function Slides(p_width:Number, p_height:Number, p_slideColors:Array):void
        {
            _width = p_width;
            _height = p_height;
            _slideColors = p_slideColors;

            init();

        }// end function

        private function init():void
        {
            addSlides();
            addControls();
            addMask();

            addEventListener(Event.ENTER_FRAME, enterFrameHandler);

        }// end function

        private function addSlides():void
        {
            _slides = new Array();

            for(var i:uint = 0; i < _slideColors.length; i++)
            {
                var slide:Slide = new Slide(_width, _height, _slideColors[i]);
                slide.x = _width * i;
                addChild(slide);

                _slides.push(slide);

            }// end for

        }// end function

        private function addControls():void
        {
            _leftControl = new Sprite();
            _leftControl.graphics.beginFill(0x000000, 0);
            _leftControl.graphics.drawRect(0, 0, 50, _height);
            _leftControl.graphics.endFill();
            addChild(_leftControl);

            var _rightControl:Sprite = new Sprite();
            _rightControl.graphics.beginFill(0x000000, 0);
            _rightControl.graphics.drawRect(0, 0, 50, _width);
            _rightControl.graphics.endFill();
            _rightControl.x = _width - _rightControl.width;
            addChild(_rightControl);

            _leftControl.addEventListener(MouseEvent.CLICK, mouseClickHandler);
            _rightControl.addEventListener(MouseEvent.CLICK,  mouseClickHandler);

        }// end function 

        private function mouseClickHandler(e:MouseEvent):void
        {
            if(!_isSliding)
            {
                if(e.currentTarget == _leftControl)
                {
                    slideLeft();
                }
                else
                {
                    slideRight();

                }// end if

            }// end if

        }// end function

        private function slideLeft():void
        {
            if(!(_currentSlide <= 1))
            { 
                for(var i:uint = 0; i < _slides.length; i++)
                {
                    _slides[i].tweenLeft();

                }// end for

                _currentSlide--;

            }// end if

        }// end function

        private function slideRight():void
        {
            if(!(_currentSlide >= _slides.length))
            {
                for(var i:uint = 0; i < _slides.length; i++)
                {
                    _slides[i].tweenRight();

                }// end for

                _currentSlide++;

            }// end if

        }// end function

        private function addMask():void
        {
            var maskSprite:Sprite = new Sprite();
            maskSprite.graphics.beginFill(0x000000);
            maskSprite.graphics.drawRect(0, 0, _width, _height);
            maskSprite.graphics.endFill();
            addChild(maskSprite);

            this.mask = maskSprite;

        }// end function

        private function enterFrameHandler(e:Event):void
        {
            if(_slides[0].isSliding)
            {
                _isSliding = true;

            }
            else
            {
                _isSliding = false;

            }// end if else

        }// end function

    }// end class
这是您将用于幻灯片类的代码

有了这一点,这个例子是完整和有效的。老实说,这个问题有点难理解,所以我举了一个非常普遍的例子,用幻灯片来演示TweenLite,希望你能从中有所收获。通过使用这种方法,您可以通过编辑slide类中的TweenLite.to方法来更改每张幻灯片的tween效果。如果你能从你的flash应用程序/电影中输入更多的代码或链接,它可以帮助你得到更好的答案。我知道这肯定会帮我给你一个更好的。如果您对示例有任何疑问,请留言或联系memy。我的个人资料中有我的联系方式

我希望这有助于:

package com.vincent
{
    import com.greensock.TweenLite;
    import flash.display.Sprite;

    internal class Slide extends Sprite
    {
        private var _width:Number;
        private var _height:Number;
        private var _slideColor:uint;
        private var _isSliding:Boolean;

        public function get isSliding():Boolean
        {
            return _isSliding;

        }// end function

        public function Slide(p_width:Number, p_height:Number, p_slideColor:uint):void
        {
            _width = p_width;
            _height = p_height;
            _slideColor = p_slideColor;

            init();

        }// end function

        private function init():void
        {
            var slideContent:Sprite = new Sprite();
            slideContent.graphics.beginFill(_slideColor);
            slideContent.graphics.drawRect(0, 0, _width, _height);
            slideContent.graphics.endFill();
            addChild(slideContent);

        }// end function

        public function tweenLeft():void
        {
            _isSliding = true;

            TweenLite.to(this, 1, {x: this.x + _width, onComplete: onTweenComplete});

        }// end function 

        public function tweenRight():void
        {
            _isSliding = true;

            TweenLite.to(this, 1, {x: this.x - _width, onComplete: onTweenComplete});

        }// end function 

        private function onTweenComplete():void
        {
            _isSliding = false;

        }// end function

    }// end class

}// end package