2010-12-11 7 views
0

질문이 있지만 설명하기가 어렵습니다. 명확하지 않은 경우 자유롭게 의견을 말하십시오. 내가 제거하거나 나는 그것이 전환으로 표시 할 슬라이드를 추가 할 때 지금, 나는이 다른 넣어 별도의 클래스를 생성하고 싶은별도의 클래스로 전환 지정하기

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

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

     } 

을 :

나는 다음과 같은 보이는 기능이 tweenlite를 사용하여 전환합니다. 어떻게하면 최선의 방법으로 접근 할 수 있습니까? 요약하면 자식을 추가하거나 제거하면 전환 클래스가 호출되고 전환이 반환되고 슬라이드가 추가되거나 제거되면 애니메이션이 생깁니다.

답변

0

이 문제를 처리하는 한 가지 방법은 슬라이드를 추가하거나 제거 할 때 호출 할 수있는 메서드를 구현하는 것입니다. 전이를위한 특정 클래스를 사용하는 것이 도움이 될지 모르겠지만 어떤 경우 이건간에 Transition Object를 매개 변수로 함수에 전달할 수 있습니다.

또한 전환 개체가 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); 
     } 
} 
0

당신이 다음의 예처럼 될 수있는 접근 coud 방법 :

당신은 클래스 홈페이지 (문서 클래스)를 만들 것이다, com.vincent.Slides 및 COM .

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 인스턴스를 스테이지에 추가합니다.

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 

} // 슬라이드 클래스에서 최종 패키지

, 당신은 스프라이트, 이벤트 및 된 MouseEvent 클래스를 가져올 것입니다. Slide 클래스는 내부 클래스이므로 가져올 필요가 없습니다. 내부 클래스는 동일한 패키지 내의 모든 클래스에서 액세스 할 수 있습니다. 다음으로 Slides 클래스의 Sprite 클래스를 확장합니다.

다음에는 표시 객체의 너비와 높이를 포함하는 _width 및 _height 속성을 선언합니다. 각 슬라이드의 색상 배열을 포함하는 _slideColors. 현재 슬라이드 번호를 나타내는 _currentSlide; _leftControl 및 _rightControl은 클릭시 슬라이드를 왼쪽 및 오른쪽으로 밀어 넣기위한 컨트롤입니다. 마지막으로 _isSliding은 슬라이드가 움직이는 경우 true로, 그렇지 않은 경우 false로 설정됩니다.

Slide 클래스를 초기화하려면 Slides 속성에 해당 Slides 인수를 할당합니다. 그런 다음 init()이라는 첫 번째 메서드에서 addSlides() 메서드에 대한 호출이 호출됩니다.

addSlides() 메서드에서 _slides 속성이 인스턴스화됩니다. 다음 for 루프는 _slideColors 배열의 모든 슬라이드 색상을 반복하고 무대에 추가 된 Slide 인스턴스를 만들고 _slides 배열에 추가하는 데 사용됩니다. 각 Slide 인스턴스를 만들 때 너비, 높이 및 슬라이드 색상이 파싱되고 각 슬라이드는 이전 슬라이드의 오른쪽에 배치됩니다.

addSlides() 메서드가 호출 된 후 init() 메서드에서 호출 된 다음 메서드는 addControls()입니다. addControls() 메서드에서 _leftControl 및 _rightControl 스프라이트가 그려지고 슬라이드 표시 객체에 추가됩니다. 이들은 보이지 않으며 슬라이드 표시 객체의 왼쪽 및 오른쪽 가장자리에 각각 배치됩니다. 다음으로 사용자가 클릭했을 때들을 수있는 컨트롤에 이벤트 리스너를 추가합니다. 사용자가 클릭하면 mouseClickHandler() 메서드가 호출됩니다.

mouseClickHandler() 메서드에는 슬라이드가 슬라이드되는지 확인하는 조건문이 있습니다. 그렇지 않은 경우 다른 조건문에서 클릭 한 컨트롤을 확인하고 해당하는 slideLeft() 또는 slideRight() 메서드를 호출합니다.

slideLeft() 및 slideRight() 메서드에는 현재 슬라이드가 첫 번째 또는 마지막 슬라이드가 아닌지 확인하는 조건문이 있습니다. 그렇지 않은 경우 _slides 배열의 모든 슬라이드에 대해 tweenLeft() 또는 tweenRight() 메서드가 호출됩니다. 그 후 _currentSlide 속성이 1 씩 증가하거나 감소합니다.

addControls() 메서드가 호출 된 후 init() 메서드에서 호출되는 다음 메서드는 addMask()입니다. 이렇게하면 Sprites 표시 객체에 마스크를 추가하기 만하면 한 번에 하나의 슬라이드 만 볼 수 있습니다.

addMask() 메소드가 호출 된 후 init() 메소드에서 호출 된 다음 메소드는 addMask()입니다. 이렇게하면 Sprites 표시 객체에 마스크를 추가하기 만하면 한 번에 하나의 슬라이드 만 볼 수 있습니다.

마지막으로 addMask() 메서드가 호출 된 후 enterFrameHandler() 메서드를 반복적으로 발생시키는 입력 프레임 이벤트 수신기를 추가합니다.

enterFrameHandler() 메서드에는 슬라이드가 슬라이딩 중인지 확인하고 true 또는 false를 _isSliding 속성에 할당하는 조건문이 있습니다.

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 

이것은 슬라이드 클래스에 사용할 코드입니다.

그걸로 예제는 완전하고 작동합니다. 솔직히 질문하는 것이 약간 이해하기 어려웠으므로 TweenLite에서 슬라이드를 사용하여 매우 다른 예를 들었습니다. TweenLite를 사용하여 슬라이드에서 뭔가를 가져갈 수 있기를 바랍니다. 이 방법을 사용하면 Slide 클래스에서 TweenLite.to() 메서드를 편집하여 각 슬라이드의 트윈 효과를 변경할 수 있습니다. 플래시 앱/영화 또는 링크에서 더 많은 코드를 추가 할 수 있다면 더 나은 답변을 얻을 수 있습니다. 나는 그것이 당신에게 더 나은 것을주는 것을 확실히 도울 것입니다. 예제에 대해 질문이 있으면 의견을 남기거나 나와 연락하십시오 (내 연락처 정보는 내 프로필에 있습니다).

도움이 되었기를 바랍니다.

관련 문제