簡體   English   中英

AS3-單擊鼠標會影響數組時間軸中的對象

[英]AS3-Having a mouse click affect object in an array's timeline

我為此感到瘋狂。 我在舞台上有幾只熊,並以陣列的形式列出了它們。 我希望他們在單擊時更改其動畫框架,只要它們不在“向下”動畫框架上即可。 下面是代碼。 問題在///檢查是否擊中線下方。

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

currentFrame返回一個整數,而不是字符串。 如果要使用字符串,則必須使用currentFrameLabelcurrentLabel

編輯: http : //help.adobe.com/zh_CN/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");
    }
}

我通過用鼠標檢查一次hittest而不是僅僅檢查單擊來使其工作。 出於某種原因,這行得通。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM