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!