ActionScript 3 选择影片剪辑

Posted

技术标签:

【中文标题】ActionScript 3 选择影片剪辑【英文标题】:ActionScript 3 Selecting a MovieClip 【发布时间】:2014-09-19 08:20:00 【问题描述】:

我的情况是这样的: 我在舞台上有几个 (2+) 影片剪辑。 除了背景之外,每个都包含一个输入文本框。

当我单击第一个 MovieClip 时,它被选中并显示一个浅蓝色阴影以表示它:http://puu.sh/aueAw/3575e83aca.png

如果我点击第二个,它看起来像这样:http://puu.sh/aueEj/826e1c9cb9.png

然而,当第二个影片剪辑的文本框被点击时,第一个影片剪辑被选中!这对我来说没有任何意义。

这可能是什么原因造成的?只要我不考虑这些嵌套的文本框,一切都会正常运行。

提前感谢您的有用回答!

最好的问候, 奥林 K.

编辑:这是我用来向 MovieClips 添加事件侦听器的代码。

public function updateVisualDocument()

        if (!uniDocument.isEmpty())
        
            //Update the Visual Document if the current Document contains any pages
            visualDocument.uniPage.gotoAndStop(uniDocument.getCurrentPage().getLayout());
            visualDocument.uniPage.pageNumber.text = uniDocument.getPageIndex();

            //Update Thumbnails
            for each (var someThumb in thumbnailArray)
            
                someThumb.deselect();
            
            thumbnailArray[uniDocument.getPageIndex() - 1].select();

            for (var i:int = 0; i < visualDocument.uniPage.panelContainer.numChildren; i++)
            
                var somePanelMC = visualDocument.uniPage.panelContainer.getChildAt(i);
                if (!uniDocument.getCurrentPage().hasPanels())
                
                    uniDocument.getCurrentPage().addPanel(somePanelMC);
                
                somePanelMC.addEventListener(MouseEvent.CLICK, panelClicked);

                uniDocument.getCurrentPage().getPanel(i).setPanelMC(somePanelMC);

                function panelClicked(e:Event)
                
                    //Panel gets selected
                    var panelIndex:int = int(e.target.name.substring(5));
                    uniDocument.getCurrentPage().deselectAllPanels();
                    uniDocument.getCurrentPage().getPanel(panelIndex).select();
                
            
            uniDocument.getCurrentPage().panelsAreFull();
            uniDocument.getCurrentPage().selectFirst();
        
    

编辑:我尝试将文本框更改为动态文本(来自输入文本)类型,但问题仍然完全相同。我单击文本框,它选择了第一个 MovieClip。我认为这可能与使用相同的实例名称有关,但既然它是嵌套的,为什么要重要?

【问题讨论】:

任何人都可以帮助你,你将展示你正在使用的代码,它会出现这个问题。 您是否不小心给了他们相同的实例名称? @LDMS,文本框都是“myText.text”,但面板的实例名称为“Panel1”、“Panel2”、“Panel3”等。在我在原帖中提供的屏幕截图中,只有两个面板,但面板可以不止两个(取决于布局),每个布局都会出现这个问题。 【参考方案1】:

看来是我自己想出来的。部分。我处理了 LDMS 在他的评论中所说的“你是否不小心给了他们相同的实例名称?”

嗯,不,我没有。但是-文本框都具有相同的实例名称。这无关紧要,但它让我专注于文本框的名称,我意识到由于我将 mouseChildren 设置为 false,文本框是触发事件侦听器的文本框。

所以我修改了一些代码,如下所示:

function panelClicked(e:Event)

    //Panel gets selected
    if (!e.target.name == "myText")
    
        var panelIndex:int = int(e.target.name.substring(5));
        uniDocument.getCurrentPage().deselectAllPanels();
        uniDocument.getCurrentPage().getPanel(panelIndex).select();
    

现在它可以工作了!这是一个简单的解决方法,因为myText.mouseEnabled = false; 不是一个选项,因为它需要被点击。

希望这对将来的某人有所帮助!干杯!

【讨论】:

以上是关于ActionScript 3 选择影片剪辑的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3:使影片剪辑播放到最后

无法将其他 Flash 影片剪辑访问到 Actionscript 3

Actionscript 3 影片剪辑与主时间线的关系

使用 ActionScript 3.0 反向播放影片剪辑

Flash Actionscript 3.0 影片剪辑过渡(无按钮)

在 EXIT_FRAME 上的 Actionscript 3.0 影片剪辑修改