for (var i:uint=0; i<1; i++) { //这行出问题
var droped:MovieClip = new drop();
droped.x = Math.round(Math.random() * this.stage.stageWidth);
droped.y = Math.round(Math.random() * 100);
addChild(droped);
dropedArray.push(droped);
}
先看这个循环,你在循环中生成的droped理论上只能在这个循环里面调用,因为它并非一个公共变量,而且droped不断作为新生成的MovieClip的引用,同时失去了对上一个生成的MovieClip的引用。
if (droped.hitTestPoint(waterman.x, waterman.y,false)) {
再看这一行。虽然找不到droped在哪声明的,但即使你在某个地方声明了这个droped,显然droped只能代表最近一次生成的那个MovieClip,也就是数组中的最后一个元素,所以在数组中的元素多于1个时,能执行碰撞检测的也只有数组中最后一个MovieClip而已。
-------------------------------------------------------------------
不是改成public,而是不能直接if (droped.hitTestPoint这样,要从dropedArray里去取相应的droped对象,不能写droped就完了,谁知道你这个droped代表的哪一个对象呢?你生成了那么多。
其实我觉得你这段代码有很多地方不良的地方,首先累赘多次地用onEnterFrame 就很不合适, 最后说症结所在,你把hittest 方法里的droped改成,e.Target试试`~