例如,我有一个电影剪辑的层次结构。mc1是mc的孩子,mc2是mc1的孩子。结果是当我
mc1.visible = false;可见的保持为真。
这是应该发生的吗?有测试mc2可见性的快捷方式吗?
要玩的代码:
var mc = new Sprite();
mc.graphics.beginFill(0xFF0000);
mc.graphics.moveTo(50,50);
mc.graphics.lineTo(100,50);
mc.graphics.lineTo(100,100);
mc.graphics.lineTo(50,100);
mc.graphics.endFill();
var mc1 = new Sprite();
mc1.graphics.beginFill(0x00ff00);
mc1.graphics.moveTo(150,150);
mc1.graphics.lineTo(200,150);
mc1.graphics.lineTo(200,200);
mc1.graphics.lineTo(150,200);
mc1.graphics.endFill();
mc.addChild(mc1);
var mc2= new Sprite();
mc2.graphics.beginFill(0x0000ff);
mc2.graphics.moveTo(250,150);
mc2.graphics.lineTo(200,150);
mc2.graphics.lineTo(200,200);
mc2.graphics.lineTo(250,200);
mc2.graphics.endFill();
mc1.addChild(mc2);
stage.addChild(mc);
mc1.visible = false;
function myOnEnterFrame(e){
trace(mc2.hitTestPoint(mouseX, mouseY));
}
stage.addEventListener(Event.ENTER_FRAME, myOnEnterFrame);结果:mc2可见仍为真。hitTest仍然会为mc2开火。
除了对父母进行迭代之外,还有其他方法在舞台上测试mc2的存在吗?
发布于 2009-11-06 06:52:50
如果父级的可见属性设置为false,则在阶段中将看不到其子属性。但这并不意味着子属性的可见属性将自动设置为false --它们将继续保存它们的原始值。
简而言之,具有可见属性的DisplayObject true不需要在舞台上可见--它也取决于其父母的可见值。但是,如果一个对象的可见性设置为false,那么无论如何它都是不可见的。
编译以下代码并单击文本字段以更好地理解它。textfield将变得不可见(因为它的父字段的可见值被设置为false),但是它自己的可见属性仍然是true
private var sprite:Sprite;
private var tf:TextField;
public function init():void
{
sprite = new Sprite();
addChild(sprite);
tf = new TextField();
tf.text = "sometext";
sprite.addChild(tf);
sprite.addEventListener(MouseEvent.CLICK, onClick)
}
private function onClick(e:MouseEvent):void
{
sprite.visible = false;
trace(tf.visible);//traces true - but tf is not displayed.
}更新以回答clorz关于如何检查对象是否可见的问题:
function isVisible(t:DisplayObject):Boolean
{
if(t.stage == null)
return false;
var p:DisplayObjectContainer = t.parent;
while(!(p is Stage))
{
if(!p.visible)
return false;
p = p.parent;
}
return true;
}发布于 2009-11-06 00:14:40
是的,设置为visible=false的父级的子级也将被隐藏。它遵循简单的层次结构。
并且可以通过以下方法测试可见状态:
if(uiObject.visible) ...或者,您可以始终设置alpha = 0,但在内存管理方面,如果要处理大量对象,最好将对象从舞台上删除。
更多信息在本文中
发布于 2009-11-06 03:19:27
不,这不应该发生的。如果你隐藏一个父MovieClip,那么这个孩子也会被隐藏。我的猜测是,要么mc2不是mc1的子代,要么是你在其他地方引用另一个又称为mc1的剪辑。
https://stackoverflow.com/questions/1684549
复制相似问题