Actionscript 3 ActionScript从类外访问函数/变量

Actionscript 3 ActionScript从类外访问函数/变量,actionscript-3,Actionscript 3,如何从另一个类(或框架脚本)调用sprite类的公共函数或变量?我通过一个静态类型flash的引用不断得到1061:调用一个可能未定义的方法getSide //Framescript var a:Sprite = new customRect(); addChild(a); a.getSide(); //.as file package { import flash.display.Sprite; public class customRect extends Sprite { public

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

//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);
}
}
}

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

或者,我相信您可以使用方括号来访问精灵的动态属性(即mysprite['myRandomVariableName']),但最好是强类型对象

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

您只需要:

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

您正在尝试调用Sprite类的实际方法还是添加到Sprite子类中的方法?我猜您需要将变量强制转换为您正在使用的实际类。因此,不要:

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

YourClass(someReference).yourFunction();
…这仅在您不控制someReference的类型时才需要-如果您控制了,您只需使用var someReference:YourClass定义它,以使编译器知道它是YourClass类型的var,而不是Sprite类型的var

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

var a:Sprite = new customRect();

因此编译器知道它是一个customRect,而不是一个“通用”精灵


顺便说一句:自定义以大写字母开头的类名:因此使用CustomRect而不是CustomRect。

我真的不敢相信,在一直这么简单的情况下,这对我来说是一个巨大的问题。谢谢!没问题:)文档中并没有那么清楚。
var a:customRect = new customRect();