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

时间:2014-04-02 23:11:06

标签: actionscript-3 flash actionscript adobe-flash-cs3

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

 //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");
         }
    }
}

2 个答案:

答案 0 :(得分:0)

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

编辑: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");
    }
}

答案 1 :(得分:0)

我通过使用鼠标检查hittest而不是仅仅检查点击来实现它。这有点原因。