如何从另一个类(或框架脚本)调用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);
}
}
}
答案 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。