Nazwa klatki na listwie czasowej z poziomu as3

Ostatnimi czasy nie miałam wielu okazji żeby, szumnie to nazwę, poszaleć z actionscript 3.0 Dlatego gdy dziś przyszło mi zrobić rzecz stosunkowo prostą, delikatnie mówiąc, trochę się zacięłam. Pocieszam się tym, że nie jestem odosobniona, i czasem nawet największym gwiazdom as3 zdarza się zapominać o podstawach (przecież powiedziałam że się pocieszam :P), dlatego poniżej prezentuję jak odnosić się do numeru lub nazwy klatki z poziomu as3, oraz jak sprawdzać na której klatce znajduje się nasza animacja.

Ale, ale my tu gadu gadu , a actionscript płonie:-) Na głównej scenie mam movie clip o nazwie „mcmain” w którym zawarta jest animacja na linii czasowej która kończy się na 30 klatce. Chcę po zakończeniu animacji odpalona została inna akcja, zrobię to za pomocą następującego kodu as3 (pamiętajcie o importowaniu klas)

import flash.events.Event; 
//dodaje event listener do klipu z animacją 
mcmain.addEventListener(Event.ENTER_FRAME, currFrameCheck); 
private function currFrameCheck(event:Event):void {  
     if(mcmain.currentFrame == 30){ 
        //zrób coś 
        // pamiętaj o usunięciu event listenera kiedy już nie jest potrzebny
        mcmain.removeEventListener(Event.ENTER_FRAME, currFrameCheck); 
    }else{ 
        trace(mcmain.currentFrame); 
    } 
}

Prościzna, nie?:-) No ale jak już skryptujemy to róbmy to dobrze, zamiast podawać w funkcji nazwę konkretnego klipu zamienię ją na event.target, dzięki temu będzie można ją używać wielokrotnie do różnych klipów, a wygląda to tak:

import flash.events.Event; 
//dodaje event listener do klipu z animacją 
mcmain.addEventListener(Event.ENTER_FRAME, currFrameCheck); 
private function currFrameCheck(event:Event):void {  
   if(event.target.currentFrame == 30){ 
        //zrób coś 
        // pamiętaj o usunięciu event listenera kiedy już nie jest potrzebny 
        event.target.removeEventListener(Event.ENTER_FRAME, currFrameCheck); 
    }else{ 
        trace(event.target.currentFrame); 
    } 
}

Da się? Da się! Wszystko ładnie pięknie, tylko po co ograniczać się do numeru klatki, a co jeśli po majstrujemy przy naszej animacji i nie będzie się ona kończyć zawsze na 30 klatce? Zamiast każdorazowo uaktualniać kod możemy odwołać się do nazwy klatki (frame label). W klipie z animacją, ostatnią klatkę (lub tą przy której chcemy odpalić akcję) nazwijmy endframe. Wtedy w kodzie zamiast currentFrame użyjemy currentLabel i voila! A gdyby mój malowniczy opis nie wystarczył to wygląda to tak:

import flash.events.Event; 
//dodaje event listener do klipu z animacją 
mcmain.addEventListener(Event.ENTER_FRAME, currFrameCheck); 
private function currFrameCheck(event:Event):void {  
   if(event.target.currentLabel == ”endframe”){ 
        //zrób coś 
        // pamiętaj o usunięciu event listenera kiedy już nie jest potrzebny 
        event.target.removeEventListener(Event.ENTER_FRAME, currFrameCheck); 
    }else{ 
        trace(event.target.currentLabel); 
    } 
}

Ok, to chyba wszystko na dziś, dzięki za przeczytanie posta, mam nadzieję że informacja była przydatna. Korzystając z okazji wszystkiego dobrego w Nowym Roku!

 

0 0 vote
Article Rating