flash – DisplayObject的可见属性
发布时间:2020-12-15 07:27:01 所属栏目:百科 来源:网络整理
导读:例如,我有一个电影剪辑的层次结构. mc1是mc的子节点,mc2是mc1的子节点. 事实证明,当我设置 mc1.visible = false; mc2.visible保持正确. 这应该发生吗? 是否有测试mc2可见性的快捷方式? 代码: var mc = new Sprite();mc.graphics.beginFill(0xFF0000);mc.g
例如,我有一个电影剪辑的层次结构. mc1是mc的子节点,mc2是mc1的子节点.
事实证明,当我设置 mc1.visible = false; mc2.visible保持正确. 这应该发生吗? 代码: var mc = new Sprite(); mc.graphics.beginFill(0xFF0000); mc.graphics.moveTo(50,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,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,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在舞台上的存在吗? 解决方法
如果父级的visible属性设置为false,则不会在舞台中显示其子级.但这并不意味着儿童的可见属性会自动设置为假 – 他们将继续保持其原始值.
简而言之,在舞台上不需要显示具有可见属性true的DisplayObject – 它也取决于其父项的可见值.但是,如果对象的可见性设置为false,则无论如何都不会显示. 编译以下代码并单击文本字段以更好地理解它.文本字段将变为不可见(因为它的父级可见设置为false),但它自己的可见属性仍然是真的 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |