AS3-鼠标点击会影响数组时间轴中的对象

Posted

技术标签:

【中文标题】AS3-鼠标点击会影响数组时间轴中的对象【英文标题】:AS3-Having a mouse click affect object in an array's timeline 【发布时间】:2014-05-14 12:39:59 【问题描述】:

我要疯了。我在舞台上有几只熊,并将它们列在一个数组中。我希望他们在单击时更改他们的动画帧,只要他们不在“向下”动画帧开始。下面是代码。问题出现在 //check 他们是否被命中线下方。

 //put the bears in an array
var bearsArray: Array = new Array();
for (var i=0; i<numChildren;i++) 
    if (getChildAt (i) is bear_mc) 
        bearsArray.push(getChildAt(i));
    


//move them up and down
addEventListener(Event.ENTER_FRAME,upAndDown);
function upAndDown(event:Event)
    if (Math.random() < 0.02)
        var randomBear = Math.floor(Math.random() * 9);
            bearsArray[randomBear].gotoAndPlay("popup");
    



//check if they get hit 
for (var j:int = 0; j < bearsArray.length; j++)
    bearsArray[j].addEventListener(MouseEvent.CLICK, hitBears);


function hitBears(e:MouseEvent)
    for (var k: int=0; k<numChildren; k++)
        if (bearsArray[k].currentFrame != "down")
            trace("clicked"); 
            bearsArray[k].gotoAndPlay("surprised");
         
    

【问题讨论】:

【参考方案1】:

currentFrame 返回一个整数,而不是字符串。如果要使用字符串,则必须使用 currentFrameLabelcurrentLabel

编辑:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html#currentLabel

如果您只想控制一只熊,请记住您不需要循环遍历它们(实际上这没有任何意义,因为您会检查每只熊)。更好(和正确)的方法是:

function hitBears(e:MouseEvent)
    var bear:MovieClip = e.currentTarget as MovieClip;
    if(bear.currentLabel != "down")  //or currentFrameLabel, depends how your mc is set up
        trace("clicked");
        bear.gotoAndPlay("surprised");
    

【讨论】:

谢谢,我改成了currentFrameLabel,还是不行。 你想控制所有的熊还是只控制被点击的?我不太确定您要实现什么目标以及现在到底发生了什么。 只是被点击的熊并且只有当它还没有在它的动画的“向下”帧中时。本质上,我正在为我的孩子制作一个类似打地鼠的游戏。至于它现在在做什么,当熊被点击时,“点击”跟踪语句甚至没有运行,它肯定没有改变动画帧。 其实我补充一下,点击的trace语句确实执行了,但是貌似是随机的。很难说为什么它有时会这样做而不是其他人。 感谢您的更新,但这与之前的结果完全相同:( 跟踪功能仍然随机执行。【参考方案2】:

我通过用鼠标检查命中测试而不是只检查点击来让它工作。这出于某种原因。

【讨论】:

以上是关于AS3-鼠标点击会影响数组时间轴中的对象的主要内容,如果未能解决你的问题,请参考以下文章

as3 判断鼠标在非透明区域点击图片

flash as3 图片展示将鼠标移到图片上就显示文字,然后再点击文字后移除并且显示下一张图片

Unity - 在鼠标点击的位置放置对象

Qt OpenGL-如何根据鼠标点击获取对象

还记得鼠标点击的地方吗?数组列表?哈希码?

AS3如何根据用户使用鼠标绘制线条的位置查找贝塞尔曲线的控制点