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!