通过Flash中的Actionscript 3访问符号实例

时间:2011-11-03 15:18:30

标签: flash actionscript-3 flash-cs4

背景资料:

  • 我使用的是Adobe Flash CS4
  • 我正在使用Actionscript 3
  • 我将我的代码发布到Adobe AIR文档中,但我不确定这是否与此特定问题相关。

  • 我在库中创建了两个符号,大矩形,并在舞台上放置了它们的实例。

  • 我正在使用“getObjectsUnderPoint”来检测点击鼠标的对象。
  • 我已经验证了getObjectsUnderPoint通过跟踪名称来检测符号实例。

问题

  • getObjectsUnderPoint检测到的对象的跟踪名称都是instance1,instance2,instance3等,即使我已经命名了实例。
  • 当尝试确保在任一矩形所包含的区域上单击鼠标时,这会导致问题,因为我无法检查object [i] .name ==“leftbox”和instance1, instance2等名称随着我在舞台上添加/删除东西而改变,所以我不想检查instance2和instance3(现在是我创建的2个框,它们被命名为“leftbox”和“右撇子“分别。”

问题:

我在检测姓名时做错了吗?如何通过我的类中的ActionScript实际检测我在舞台上创建的实例名称?

这是我的代码:

        var pt:Point = new Point(e.stageX, e.stageY);
        var objects:Array = getObjectsUnderPoint(pt);
        var action = 0;

        for(var i=0; i< objects.length; i++) {
            trace(objects[i].name);
        }

        if( objects.indexOf('left_box') >= 0 ){
            action = 1;

        }
        if(objects.indexOf('right_box') >= 0 ){
            action = 2;

        }

3 个答案:

答案 0 :(得分:1)

让我想起一句话:“我没有解决你的问题,但我当然很佩服这个问题”

如果您尝试跟踪(objects [i]),您将看到函数getObjectsUnderPoint返回的形状不是MovieClip,因此您永远不会得到您要查找的名称。

答案 1 :(得分:1)

法希姆·阿克特在评论中指出,我正在追踪形状,而不是物体。这使我得到了比我迄今为止能够制作的更准确的谷歌搜索。

搜索引导我进入这个论坛主题:http://www.actionscript.org/forums/showthread.php3?t=231181

this特定帖子(第6号)中,作者指出

  

“事实证明,getObjectsUnderPoint返回的数组   最简单的对象 - 孩子,如果有意义的话。我以前可以   只需在我的末尾添加一个.parent即可解决部分问题   可变...“

我将.parent附加到对象,并收到了相应的名称:

        var pt:Point = new Point(e.stageX, e.stageY);
        var objects:Array = stage.getObjectsUnderPoint(pt);
        var action = 0;

        for(var i=0; i< objects.length; i++) {
            trace(objects[i].parent.name);
        }

        if( objects.indexOf('left_box') >= 0 ){
            action = 1;

        }
        if(objects.indexOf('right_box') >= 0 ){
            action = 2;

        }

这解决了我的问题,希望能让我们更好地理解getObjectsUnderPoint。

答案 2 :(得分:1)

推进Fahim Akhter的回答,

然后,您可以循环获取父级,直到该对象为movieclip

var o:DisplayObject=objects[i];
while(!(o.parent is MovieClip)) {
    o=o.parent;
}
var myMovieClip:MovieClip=o.parent;

这应该会在myMovieClip中为您提供一个影片剪辑,当您追踪myMovieClip.name时,您将获得所需内容。

这也适用于多级符号(其中1个符号包含另一个符号)