2014-02-10 18 views
0

我正在使用greescock代碼作爲as3,我只想爲類中的電影註釋。這部電影被稱爲About類中的內容,它代碼如下。as3 greensock throwprops在函數中使用任何MC

正如你所看到的,我的內容被稱爲「內容」,我在這裏用內容替換了mc var。希望這會工作,但沒有。

任何想法如何使用Greensock as3以及如何滾動內容?

var mc:Sprite = getChildByName("content") as MovieClip; 


package com.views 
{ 

    import flash.display.MovieClip; 
    import com.greensock.*; 
    import com.greensock.easing.*; 
    import com.greensock.plugins.*; 
    import flash.geom.Rectangle; 
    import flash.utils.getTimer; 
    import flash.events.MouseEvent; 
    import flash.text.*; 
    import flash.display.*; 
    TweenPlugin.activate([ThrowPropsPlugin]); 


    public class viewAbout extends MovieClip 
    { 


     public function viewAbout() 
     { 



      var bounds:Rectangle = new Rectangle(0,100,1080,1920); 
      var mc:Sprite = getChildByName("content") as MovieClip; 
      //setupTextField(mc, bounds); 
      var blitMask:BlitMask = new BlitMask(mc,bounds.x,bounds.y,bounds.width,bounds.height,false); 

      var t1:uint,t2:uint,y1:Number,y2:Number,yOverlap:Number,yOffset:Number; 

      blitMask.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

      function mouseDownHandler(event:MouseEvent):void 
      { 
       TweenLite.killTweensOf(mc); 
       trace("DOWN DOWN mouse"); 

       //blitMask.alpha = .3; 

       y1 = y2 = mc.y; 
       yOffset = this.mouseY - mc.y; 

       yOverlap = Math.max(0,mc.height - bounds.height); 
       t1 = t2 = getTimer(); 
       mc.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
       mc.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
      } 

      function mouseMoveHandler(event:MouseEvent):void 
      { 

       trace("Move Event"); 
       var y:Number = this.mouseY - yOffset; 
       //if mc's position exceeds the bounds, make it drag only half as far with each mouse movement (like iPhone/iPad behavior) 
       if (y > bounds.top) 
       { 
        trace("Somethign ?"); 
        mc.y = (y + bounds.top) * 0.5; 
       } 
       else if (y < bounds.top - yOverlap) 
       { 
        mc.y = (y + bounds.top - yOverlap) * 0.5; 
       } 
       else 
       { 
        mc.y = y; 
       } 
       blitMask.update(); 
       var t:uint = getTimer(); 
       //if the frame rate is too high, we won't be able to track the velocity as well, so only update the values 20 times per second 
       if (t - t2 > 50) 
       { 
        y2 = y1; 
        t2 = t1; 
        y1 = mc.y; 
        t1 = t; 
       } 
       event.updateAfterEvent(); 
      } 

      function mouseUpHandler(event:MouseEvent):void 
      { 
       trace("UP UP UP! "); 
       mc.stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
       mc.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
       var time:Number = (getTimer() - t2)/1000; 
       var yVelocity:Number = (mc.y - y2)/time; 
       ThrowPropsPlugin.to(mc, {throwProps:{ 
       y:{velocity:yVelocity, max:bounds.top, min:bounds.top - yOverlap, resistance:300} 
       }, onUpdate:blitMask.update, ease:Strong.easeOut 
       }, 10, 0.3, 1); 
      } 



      // constructor code 
     } 
    } 

} 

回答

0

我找到了一種方法把它放在函數中,併發送一個var作爲我想要控制的mc的名稱。到目前爲止,這工作很好。我相信一個來自greensock的人可能會說我正在做一些我不應該做的事情,但是在這裏。

請注意我的var screenX是一個來自stage.StageWidth 的var,menuBanner.width只是將mc向下移動到屏幕上。 在使用此功能時請記住這一點。希望它能幫助別人。

需要適當進口:

import flash.display.MovieClip; 
import com.greensock.*; 
import com.greensock.easing.*; 
import com.greensock.plugins.*; 
import flash.geom.Rectangle; 
import flash.utils.getTimer; 
import flash.events.MouseEvent; 
import flash.text.*; 
import flash.display.*; 
TweenPlugin.activate([ThrowPropsPlugin]); 

要調用它使用:

throwIt(yourMC); 


public function throwIt(clipContent:MovieClip) 
     { 
      var bounds:Rectangle = new Rectangle(screenX - clipContent.width,0,1080,1920); 
      //var mc:Sprite = clipContent.getChildByName("content") as MovieClip; 
      var mc:Sprite = clipContent as MovieClip; 
      addChild(mc); 

      //some variables for tracking the velocity of mc 
      var t1:uint,t2:uint,y1:Number,y2:Number; 

      mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

      function mouseDownHandler(event:MouseEvent):void 
      { 
       TweenLite.killTweensOf(mc); 
       y1 = y2 = mc.y; 
       t1 = t2 = getTimer(); 
       mc.startDrag(false, new Rectangle(bounds.x, -99999, 0, 99999999)); 
       mc.addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
       mc.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
      } 

      function enterFrameHandler(event:Event):void 
      { 
       //track velocity using the last 2 frames for more accuracy 
       y2 = y1; 
       t2 = t1; 
       y1 = mc.y; 
       t1 = getTimer(); 
      } 

      function mouseUpHandler(event:MouseEvent):void 
      { 
       mc.stopDrag(); 
       mc.stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); 
       mc.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 
       var time:Number = (getTimer() - t2)/1000; 
       var yVelocity:Number = (mc.y - y2)/time; 
       var yOverlap:Number = Math.max(0,mc.height - bounds.height); 
       ThrowPropsPlugin.to(mc, {ease:Strong.easeOut, throwProps:{y:{velocity:yVelocity, max:bounds.top+menuBanner.height, min:bounds.top - yOverlap, resistance:100}}}, 3, 0.25, .3); 
      } 
     }