Actionscript 3 不在显示列表中的对象能否访问根目录或添加到显示列表中的任何对象?
假设在文档类中Actionscript 3 不在显示列表中的对象能否访问根目录或添加到显示列表中的任何对象?,actionscript-3,list,Actionscript 3,List,假设在文档类中 public class Test extends MovieClip { public function Test() { var object1:ClassA = new ClassA(); //addChild(object1); object1.accessRoot(); } } public class A extends MovieClip { public function acces
public class Test extends MovieClip
{
public function Test()
{
var object1:ClassA = new ClassA();
//addChild(object1);
object1.accessRoot();
}
}
public class A extends MovieClip
{
public function accessRoot()
{
var mc : MovieClip = root as MovieClip;
mc.box.visible = false;
}
}
现在盒子被放在舞台上。但当类A被添加到测试类中时,它就工作了,而当类A的对象并没有添加到测试构造函数中时,根就变成了可访问的。是否有任何方法可以让不在显示列表中的对象访问根对象或显示列表对象???我不建议让您的类处理根对象或阶段对象,最好是分派事件并进行适当的封装 哈奇方式:
public class A extends MovieClip
{
private var _root:MovieClip;
public function A(root:MovieClip)
{
_root = root;
}
public function accessRoot()
{
_root.box.visible = false;
}
}
正确的方法:
public class A extends MovieClip
{
public static const ACCESS_ROOT:String = "access_root";
public function accessRoot()
{
dispatchEvent(new Event(ACCESS_ROOT));
}
}
// in your document class
var myA:A = new A();
myA.addEventListener(A.ACCESS_ROOT, handleAccessRoot);
public function handleAccessRoot(e:Event):void{
box.visible = false;
}
我不建议让您的类处理root或stage,最好是分派事件并进行适当的封装 哈奇方式:
public class A extends MovieClip
{
private var _root:MovieClip;
public function A(root:MovieClip)
{
_root = root;
}
public function accessRoot()
{
_root.box.visible = false;
}
}
正确的方法:
public class A extends MovieClip
{
public static const ACCESS_ROOT:String = "access_root";
public function accessRoot()
{
dispatchEvent(new Event(ACCESS_ROOT));
}
}
// in your document class
var myA:A = new A();
myA.addEventListener(A.ACCESS_ROOT, handleAccessRoot);
public function handleAccessRoot(e:Event):void{
box.visible = false;
}
我通常创建一种基类,其中包含对文档类的引用,或者“main”类。我在此创建的任何需要引用Main中定义的内容的内容都将扩展元素。例如: 主类(或文档类): 元素-存储对主类的引用。 它还包含一个
init()
public class Element extends MovieClip
{
private var _main:Test;
public function set main(m:Main):void
{
_main = m;
init();
}
/**
* Called when _main is defined
*/
protected function init():void
{
// override me
}
public function get main():Main{ return _main; }
}
下面是如何使用元素作为类的基类:
public class ClassA extends Element
{
/**
* Override init rather than using a constructor
*/
override protected function init():void
{
trace(main.stage);
}
}
唯一需要注意的是,当您创建对象时,当然必须设置_main属性。(如Main的第9行所示)。我通常创建一种基类,其中包含对文档类或“Main”类的引用。我在此创建的任何需要引用Main中定义的内容的内容都将扩展元素。例如:
主类(或文档类):
元素-存储对主类的引用。
它还包含一个init()
public class Element extends MovieClip
{
private var _main:Test;
public function set main(m:Main):void
{
_main = m;
init();
}
/**
* Called when _main is defined
*/
protected function init():void
{
// override me
}
public function get main():Main{ return _main; }
}
下面是如何使用元素作为类的基类:
public class ClassA extends Element
{
/**
* Override init rather than using a constructor
*/
override protected function init():void
{
trace(main.stage);
}
}
唯一需要注意的是,当您创建对象时,当然必须设置_main属性。(如Main的第9行所示)。在您的案例中,“根”是什么?它是MainTimeline对象还是默认类对象(如[object Main])?您想如何使用“root”?在我的例子中,它是一个主时间轴,也可以是默认类。在您的例子中,“root”是什么?它是MainTimeline对象还是默认类对象(如[object Main])?您想如何使用“root”?在我的例子中,它是一个主时间线,也可以是默认类。在黑客的方式中,传递根引用违反了封装??hacky way的缺点是什么?当您的对象访问根级别时,他们正在摆弄他们通常不应该访问的东西,这意味着他们可以访问所有类型的东西。除了让你做不合适的事情之外,它没有任何直接的缺点。。我是否需要实现一个接口到ProperCassin hacky方式,传递根引用违反封装??hacky way的缺点是什么?当您的对象访问根级别时,他们正在摆弄他们通常不应该访问的东西,这意味着他们可以访问所有类型的东西。除了让你做不合适的事情之外,它没有任何直接的缺点。。我是否需要实现到ProperClass的接口