ActionScript从类外部访问函数/变量

时间:2010-05-29 19:51:02

标签: actionscript-3

如何从另一个类(或框架脚本)调用sprite类的公共函数或变量?我继续得到1061:调用可能未定义的方法getSide通过静态类型flash.display:Sprite的引用。

//Framescript
var a:Sprite = new customRect();
addChild(a);
a.getSide();

//.as file
package
{
import flash.display.Sprite;

public class customRect extends Sprite
{
public var side:Number;

private function customRect()
{
var box:Sprite = new Sprite();
box.graphics.beginFill();
box.graphics.drawRect(0, 0, 200, 200);
box.graphics.endFill();

side = box.width;
}

public function getSide():void
{
trace(side);
}
}
}

2 个答案:

答案 0 :(得分:1)

你需要输入另一个类作为它的任何类型。默认情况下,Sprite不具有您尝试访问的任何属性,因此您不能只执行mysprite.myRandomVariableName。但是,如果您碰巧知道mysprite实际上是MyClass类型,那么您可以执行MyClass(mysprite).myRandomVariableName或(mysprite as MyClass).myRandomVariableName。使用as关键字时,请注意,如果mysprite不是MyClass类型,则键入的mysprite将计算为null。如果mysprite不是MyClass类型,尝试使用previous方法将mySprite键入MyClass会抛出错误。

或者,我相信你可以使用方括号来访问精灵的动态属性(即mysprite ['myRandomVariableName'],但强烈输入你的对象真是更好的做法。

//编辑,因为您发布了代码示例:

这里所需要的只是:

var a:CustomRect = new CustomRect();//note that since CustomRect is a class name, it should be captialized.

答案 1 :(得分:1)

您是否尝试调用Sprite类的实际方法或已添加到Sprite的子类中的方法?我的猜测是你需要将变量强制转换为你正在使用的实际类。所以而不是:

someReference.yourFunction();
你可以尝试:

YourClass(someReference).yourFunction();

...只有在你不控制someReference的输入时才需要这个 - 如果你这样做,你只需使用var someReference定义它:YourClass使编译器知道它是一个类的YourClass类型,并且不是雪碧。

在添加代码示例后更新,更改:

var a:Sprite = new customRect();

var a:customRect = new customRect();

所以编译器知道它是customRect而不是'general'Sprite。

作为旁白:使用大写字母启动类名是自定义的:所以使用CustomRect而不是customRect。