我似乎无法访问自动命名的对象(实例##)放在AS3的舞台上,我错过了什么?

时间:2012-05-12 17:30:47

标签: actionscript-3 flash flash-cs5

我在库中有一个movieclip,它在文档类的actionscript中动态添加到舞台上。此动画片段包含许多子图像,这些图像是从原始位置直接从photoshop导入的(必须保留)。

我不想手动命名每个图像实例,因为有几十个。

我已经完成并手动将图像转换为符号,因为显然flash不会将“位图”对象识别为AS3中父级动画片段的子项(numChildren看不到位图,但它会看到符号)。

我有一个数组,里面装满了对几十个孩子的引用,然后我循环遍历它,检查点击时是否每个都在鼠标下面。但是,不知何故,它没有检测到我点击项目,除非我手动命名子符号(我通过手动命名其中一些来测试 - 那些点击敏感。)

我已经在整个代码中进行了trace()调试,验证我的数组是否充满数据,数据实际上是实例的名称(自动命名为IE instance45,instance46,instance47) ,等等,验证函数是否在点击运行,如果我手动命名符号,验证代码是否正常工作。

任何人都可以看到出了什么问题,或者我无法理解闪光的哪个方面?

以下是代码:

    //check each animal to see if it was clicked on
    private function check_animal_hits():void
    {


        var i:int = 0;
        var animal:Object = this.animal_container;

        for (i=0; i<animal.mussels.length; i++)
        {

            if (this.instance_under_cursor(animal.mussels[i].name))
            {

                var animal_data = new Object();
                animal_data.animal = "mussel";
                this.send_data(animal_data);

            }
        }


    }

以下是instance_under_cursor()方法的代码:

    // Used for finding out if a certain instance is underneath the cursor the instance name is a string 
    private function instance_under_cursor(instance_name)
    {
        var i:Number;
        var pt:Point = new Point(mouseX,mouseY);
        var objects:Array = stage.getObjectsUnderPoint(pt);
        var buttons:Array = new Array  ;
        var o:DisplayObject;
        var myMovieClip:MovieClip;


        // add items under mouseclick to an array
        for (i = 0; i < objects.length; i++)
        {
            o = objects[i];
            while (! o.parent is MovieClip)
            {
                o = o.parent;
            }
            myMovieClip = o.parent as MovieClip;

            buttons.push(myMovieClip.name);
        }


        if (buttons.indexOf(instance_name) >= 0)
        {
            return true;
        }



        return false;
    }

更新

我相信我已将其缩小为getObjectsUnderPoint() 未检测到对象的问题,除非他们是手动命名的。

1 个答案:

答案 0 :(得分:0)

这是在鼠标指针下查找对象最奇怪的方式......有一个内置函数就是这样做的。但是,除此之外,您不应该依赖实例名称,因为它们不相关/可以仅出于历史原因进行更改/保留。使用此属性的代码是重构的主题。

然而,您观察到的可能是:当您在Flash CS中将图像放置在场景上时,Flash会尝试通过将它们全部缩小为具有位图填充的形状来优化它。一旦你将它们转换为符号,它将无法做到(因为它假设你想稍后使用它们),但它会创建Bitmpas而不是 - Bitmap不是交互式对象 - 即它不会注册鼠标事件 - 没有必要将它添加到getObjectsUnderPoint()返回的内容中。显然,你想要做的是让它们成为互动的东西 - 例如像Sprite。因此,您对作为MovieClip的父级的测试错过了这一点 - 因为父级不需要是MovieClip(可能是Sprite或SimpleButton或Loader)。

但是,如果你能解释一下你需要instance_under_cursor函数的内容,那么可能有更好的方法来完成它的目的。