as3 greensock throwprops在功能上使用任何MC

时间:2014-02-10 05:50:31

标签: actionscript-3 greensock

我正在使用ases的greescock代码,我只是想从一个类中制作一部电影。电影在About类中称为内容,其中包含此代码。

正如您所看到的,我的内容被称为“内容”,我将使用内容替换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
        }
    }

}

1 个答案:

答案 0 :(得分:0)

我找到了一种方法将它放在一个函数中并发送一个var作为我想要控制的mc的名称。到目前为止,这很有效。我相信来自绿色摇滚的人可能会说我正在做一些我不应该做的事情,但是这里有。

注意我的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);
            }
        }