加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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保持正确.

这应该发生吗?
是否有测试mc2可见性的快捷方式?

代码:

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仍然是真的.
hitTest仍会为mc2开火.

除了迭代父母之外,还有其他方法可以测试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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读