我在库中有一个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()
无法检测到对象的问题,除非它们是手动命名的。