2014-09-25 2 views
0

У меня есть 4 MovieClips в массивеЭлементы массива проверить as3

var tiles:Array = new Array("tile1","tile2","tile3","tile4"); 

Внутри каждого из них есть код пропадать, когда он щелкнул мышью на втором кадре.

this.visible = false; 

С основной временной шкалы находится элемент управления щелчком мыши для каждой из плиток (отображается только первый).

tile1.addEventListener(MouseEvent.CLICK, fl_); 

function fl_(event:MouseEvent):void 
{ 
    tile1.gotoAndStop(2); 
} 

Как я могу сделать это так, когда все плитки в массиве становятся невидимыми, вспышка, чтобы принять меры (например, чтобы перейти к кадру 5)?

Спасибо!

ответ

2

Я посмотрел на ваш .fla. Вот два способа сделать то, что вы хотели:

на главной временной шкале: (заменить текущий основной график кадра 1 код со следующим)

stop(); 

//loop through every child of the `cont` container, and add the same click listener 
var i:int = cont.numChildren 
while(i--){ 
    var tile:MovieClip = cont.getChildAt(i) as MovieClip; 
    if(tile){ 
     tile.addEventListener(MouseEvent.CLICK, tileClick, false,0,true); 
    } 
} 

function tileClick(e:MouseEvent):void { 
    //this gets a reference to one that was clicked 
    var tile:MovieClip = e.currentTarget as MovieClip; 

    tile.gotoAndStop(2); 

    //loop through the tile array to see if any are still visible 
    var i:int = cont.numChildren 
    while(i--){ 
     tile = cont.getChildAt(i) as MovieClip; 
     if(tile && tile.currentFrame == 1) return; 
    } 

    //if we got this far, all the tiles are hidden, lets go to frame 5. 
    gotoAndStop(5); 
} 

Если выше пугающим и вы предпочли бы сохранить его, как это было раньше, то это все, что вы должны сделать: (опять же, этот код будет заменить текущий основной график кадр 1 код)

stop(); 

cont.tile1.addEventListener(MouseEvent.CLICK, tileClick); 
cont.tile2.addEventListener(MouseEvent.CLICK, tileClick); 
cont.tile3.addEventListener(MouseEvent.CLICK, tileClick); 
cont.tile4.addEventListener(MouseEvent.CLICK, tileClick); 

function tileClick(e:MouseEvent):void { 
    MovieClip(e.currentTarget).gotoAndStop(2); 
    if(cont.tile1.currentFrame == 1) return; 
    if(cont.tile2.currentFrame == 1) return; 
    if(cont.tile3.currentFrame == 1) return; 
    if(cont.tile4.currentFrame == 1) return; 

    //if we got this far, all the tiles are hidden, lets go to frame 5. 
    gotoAndStop(5); 
} 
+0

большое спасибо за ваш ответ , Я просто спрашивал, как c i i перейти к кадру 5 без изменения текущей конфигурации. Он должен идти в рамку 2 внутри плитки, и эти плитки фактически находятся внутри контейнера mc. Я надеялся, что из ответа здесь я выясню остальное, но теперь это стало намного сложнее, в любом случае спасибо. Вот файл кстати: https://app.box.com/files/0/f/0/1/f_21071986269 – Johnnien

+1

Я не уверен, что еще вы хотите сделать? Создание плитки, которая была нажата, перейти к кадру 2 достаточно просто (я обновил ответ), с чем еще вы боретесь? – BadFeelingAboutThis

+0

У меня есть tile.visible = false; на втором кадре внутри плитки. Чтобы перейти к этому кадру 2, у меня есть cont.tile1.addEventListener (MouseEvent.CLICK, fl_); функция fl_ (событие: MouseEvent): void { tile1.gotoAndStop (2); } И вот у меня есть 4 плитки внутри mc, называемых «cont». Как только все они будут нажаты и невидимы, мне нужно предпринять действия, например, чтобы перейти к кадру 5 на основной временной шкале. Вот и все! Я не уверен, нужен ли массив. Благодарю. – Johnnien

Смежные вопросы