AS3- наличие щелчка мыши влияет на объект на временной шкале массива
Я схожу с ума от этого. У меня есть несколько медведей на сцене, и я перечислил их в массиве. Я хочу, чтобы они меняли свой кадр анимации при нажатии, пока они не находятся в "анимационном кадре внизу" для начала. Ниже приведен код. Проблема возникает ниже // проверки, получают ли они строку попадания.
//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 ответа
currentFrame возвращает целое число, а не строку. Если вы хотите использовать строку, вы должны использовать currentFrameLabel или currentLabel.
РЕДАКТИРОВАТЬ: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html
Если вы хотите контролировать только одного медведя, помните, что вам не нужно циклически проходить через него (на самом деле это не имеет смысла, поскольку вы будете проверять каждого из них). Лучший (и правильный) подход был бы следующим:
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");
}
}
Я получил его, проверив хит-тест с помощью мыши, вместо того, чтобы просто проверять щелчок. Это работает по какой-то причине.