我知道这个问题的标题很模糊,但很难用几句话来解释。
我有两个非文档类Animation
和SmartItem
。 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 {
}
}
}
答案 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。为了获得对它们的特定实例的访问,你必须做同样的事情来访问嵌套(或复合)类实例对象的成员变量 - (公共访问修饰符,伪单例静态,提供参考)构造函数等)