在Object内的变量内部创建一个函数

时间:2013-12-24 16:50:01

标签: actionscript-3 function class

我知道这个问题的标题很模糊,但很难用几句话来解释。

我有两个非文档类AnimationSmartItem。 SmartItem扩展了MovieClip类,它有一个Animation变量可以访问动画的功能,就像MovieClip.graphics一样,可以访问flash.display.Graphics

我想用SmartItem做同样的事情,但是有一个类动画的功能。

假设我有一个名为的函数 LinearTween(x0:Number,y0:Number,xF:Number,yF:Number,seconds:Number,easing:Function);,它根据用于调用LinearTween函数的SmartItem创建两个Tween对象。

mySmartItem.animation.LinearTween(0,0,10,10,1,None.easeNone)

在这种情况下,它将基于mySmartItem创建两个Tween对象。

问题是我不知道如何在Animation类中访问此对象以创建Tween对象。 生成的Tween对象应如下所示:

var myTweenX:Tween = new Tween(/*mySmartItem*/,"x",x0,xF,None.easeNone,seconds,true);
var myTweenY:Tween = new Tween(/*mySmartItem*/,"y",y0,yF,None.easeNone,seconds,true);

如何在动画类中引用mySmartItem?我尝试在动画中使用Stage的一个实例并尝试访问mySmartItem,并给了我运行时错误1009。

Animation.as:

package myStudio.basic {
    import fl.transitions.Tween;
    import myStudio.basic.CoreModus;
    import myStudio.dynamic.SmartItem;
    import flash.utils.*;
    public class Animation {
        import fl.transitions.easing.*;
        import flash.display.Stage;

        public var anim:Tween;
        public var modus:String;
        static var STAGE:Stage;

        public function Animation() {

        }
        public function LinearTween(x0:Number,y0:Number,xF:Number,yF:Number,seconds:Number):void {
            var myTweenX:Tween = new Tween(not_set_yet,"x",None.easeNone,x0,xF,seconds,true);
            var myTweenY:Tween = new Tween(not_set_yet,"y",None.easeNone,y0,yF,seconds,true);
            function play():void {
                myTweenX.start();
                myTweenY.start();
            }
            trace("Linear Tween");
        }
    }
}

注意:我把not_set_yet作为占位符,我应该引用该对象。

SmartItem.as:

package myStudio.dynamic {
    import flash.display.MovieClip;
    import myStudio.basic.Animation;
    public class SmartItem extends MovieClip {
        public var animation:Animation;
        static var _instance:SmartItem = null;
        public function SmartItem():void {
        }

    }

}

2 个答案:

答案 0 :(得分:1)

如果您在实例化动画对象时尝试执行类似于Graphics对象的操作,则应传入父SmartItem类的引用。

在SmartItem类中看起来像这样:

package myStudio.dynamic {
import flash.display.MovieClip;
import myStudio.basic.Animation;
public class SmartItem extends MovieClip {
    public var animation:Animation;
    static var _instance:SmartItem = null;
    public function SmartItem():void {
        animation = new Animation(this)
    }

}

}

然后在你的Animation类构造函数中:

private var _smartItem:DisplayObject;

public function Animation( smartItem:DisplayObject ) {
    this._smartItem = smartItem;
}

此时您可以在Tween函数中使用该成员变量_smartItem:

var myTweenX:Tween = new Tween(this._smartItem,"x",None.easeNone,x0,xF,seconds,true);
var myTweenY:Tween = new Tween(this._smartItem,"y",None.easeNone,y0,yF,seconds,true);

答案 1 :(得分:0)

与Java中的内部类不同,ActionScript中的辅助类无法访问嵌套类的成员变量,无论是否为final。为了获得对它们的特定实例的访问,你必须做同样的事情来访问嵌套(或复合)类实例对象的成员变量 - (公共访问修饰符,伪单例静态,提供参考)构造函数等)