我有一个带有动画片段(r1,r2等)的数组,每当有一个hittestobject时,它们会动态放置在舞台上。我想为数组中的那些动画片段添加事件侦听器,以便每次点击它们时都要删除 最后一项 。我有这个代码,但它似乎是错误的,因为只有数组的第一个元素被删除。你能帮我吗?
var counter:int = 0;
function releaseToDrop(e:MouseEvent):void
{
Star(e.target).stopDrag();
if (Star(e.target).hitTestObject(target))
{
removeChild(Star(e.target));
var replace:Array = [r1,r2,r3,r4,r5,r6,r7,r8]
addChild(replace[counter]);
counter = counter+1;
}
else
{
trace("No collision.");
removeChild(Star(e.target));
}
}
replace[counter].addEventListener("click", bindClick(o));
function bindClick(o)
{
replace.splice(replace.indexOf(replace[counter]),1);
trace(counter);
}
答案 0 :(得分:0)
首先,您的 bindClick 函数位于 releaseToDrop 函数内。这样就不会调用该函数。另外,尝试对click事件使用静态refence,因此MouseEvent.Click而不是“click”。 为方便起见,请在 bindClick 函数中跟踪“counter”的当前状态,以便了解要删除的元素。然后,您可能会在逻辑中找出缺陷的位置。
明智之举也是检查计数器不在数组范围之外。所以在 bindClick 中,检查计数器< replace.length 。 (因为替换数组当然必须在 releaseToDrop 的函数范围之外定义。
希望这能让你朝着正确的方向努力。
答案 1 :(得分:0)
是否可以为您生成的每个影片剪辑添加事件侦听器,然后在每个事件处理程序中添加条件以检查单击的影片剪辑是否为 last 项目,然后将其删除(或做你需要做的任何事情。)
你也应该接受鸡的建议。
答案 2 :(得分:0)
对于将来的引用,将addEventListener添加到数组的元素中,以便每次单击它们时,可以通过以下代码完成要删除的最后一项:
import flash.display.Sprite;
var replace:Array = [r1,r2,r3,r4,r5,r6,r7,r8]
var counter:int = 0;
// Every time there is a hittestobject an element of the array is placed on stage
function releaseToDrop(e:MouseEvent):void
{
Star(e.target).stopDrag();
if (Star(e.target).hitTestObject(target))
{
removeChild(Star(e.target));
addChild(replace[counter]);
counter = counter+1;
trace(counter);
}
}
// The first element of the array has an eventListener and when is clicked the last item of that array shown on stage is removed
var yourSprite:Sprite=new Sprite();
replace.push(yourSprite);
replace[0].addEventListener(MouseEvent.CLICK, myClickHandler, false, 0, true);
function myClickHandler (e:MouseEvent):void
{
counter =counter-1;
if (contains(replace[counter]))
removeChild(replace[counter]);
trace(counter);
}