好的,这是我的问题:我在名为Mirror
的类中有一个变量public var line:Sprite = new Sprite();
我想在另一个名为MovieClip的类中使用该变量。我在MovieClip类中导入了类:
public class MovieClips extends MovieClip
{
import Mirror;
public function MovieClips(radius:int, _x:int, _y:int,size:int,span:int,addl:Array)
{....
但是当我尝试做这样的事情时:
if (Mirror.line.hitTestObject(ball) == true) {
speedY *= -1;
}
它显示为错误:通过具有静态类型Class的引用访问可能未定义的属性行。我不确定我做错了什么?我是以错误的方式导入我的课程吗?
答案 0 :(得分:0)
如果您有一个类,如Mirror
并执行Mirror.line
之类的操作,则表示您正在尝试访问名为line的静态类变量。静态变量/方法与类绑定,而不是该类的实例。
您尚未将行定义为静态变量,因此您会收到错误。
我不确定你是否希望它成为一个静态变量,而且很可能只是让Mirror
类混淆了Mirror
类的实例。
您可能在某处创建了Mirror类的实例:
如果使用FlashPro,则var myMirror:Mirror = new Mirror()
或在时间轴上拖动实例(然后可以给它一个'myMirror'实例作为示例)。
您将在Mirror类的实例上访问line
。因此,如上所述,它将是myMirror.line
。
导入类不允许您访问该类的任何实例,因此如果您希望能够从Mirror
类中访问MoveClips
的实例,则需要传入对它的引用,或者使用parent
关键字到达正确的范围(因此,如果您的Mirror实例和MovieClips实例位于同一时间轴/父级,则可以执行Mirror(MovieClip(parent).myMirror).line
- 假设你的父母是MovieClip类型。
如果你确实想要它作为静态变量,只需将静态访问修饰符添加到它的定义中。
public static var line:Sprite
请记住,尽管静态变量总是存在于内存中,无论你是否有任何实例。
答案 1 :(得分:0)
您应该将Mirror
对象传递给MovieClips
对象,如下例所示:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var mirror:Mirror = new Mirror();
var movieClips:MovieClips = new MovieClips(mirror);
}// end function
}// end class
}// end package
import flash.display.MovieClip;
class Mirror extends MovieClip {
public var line:MovieClip;
public function Mirror():void {
line = new MovieClip();
}// end function
}// end class
class MovieClips extends MovieClip {
public function MovieClip(mirror:Mirror):void {
mirror.line;
}// end function
}// end class
此外,您可以通过Mirror.line
只读来改进:
class Mirror extends MovieClip {
private var _line:MovieClip;
public function get line():MovieClip {
return _line;
}// end function
public function Mirror():void {
_line = new MovieClip();
}// end function
}// end class