Opprett nye funksjoner for Flash med JSFL

Create nye funksjoner for Flash med JSFL
2
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne introduksjonen til Javascript for Flash plakater (JSFL) skriptspråk, vil du lære hvordan du kan automatisere repetitive oppgaver og legge til nye kommandoer til Flash authoring miljøet .




Innledning

Vi vil begynne med å utforske JSFL generelt, se hva den kan gjøre, for så å bygge opp til et nyttig program for det: en kommando som kan slå inn tekst i en knapp (med sin hit området satt riktig) i et enkelt klikk



Trinn 1:. Lag en JSFL File

Åpne Flash og klikk fil > Nye
. Velg Flash Javascript-fil
fra listen, og lagre det nye dokumentet som example.jsfl
, hvor som helst.

JSFL er et rent tekstformat, slik at du kan åpne JSFL filer i en tekst editor



Trinn 2:. Lag en FLA

Vi trenger en blank FLA å teste våre scripts, så lage en av disse, også. Du trenger ikke engang å redde det; det er bare for testing



Trinn 3:. Skriv Noen Script

I ditt JSFL filen, lim inn følgende kode:.
fl.getDocumentDOM () addNewOval ({venstre: 100, topp: 150, høyre: 150, bunn: 200});

Selv om du aldri har brukt Javascript før, er syntaksen like nok til Action at du kan gjette hva den gjør:

fl er et objekt som representerer Flash programmet selv

getDocumentDOM () returnerer den åpne FLA

addNewOval () tegner en oval til FLA, med parametrene gitt



Trinn 4: Kjør script

Hvis du redigerer JSFL i Flash, kjøre skriptet ved å klikke den store trekantede Play-knappen på verktøylinjen. Ellers dobbeltklikker JSFL fil på datamaskinen, og det vil automatisk kjøre i Flash.

Du bør se en sirkel vises, ved hjelp av hva fargene du hadde valgt. Flott! Nå når du trenger å tegne en 50 piksler sirkel sentrert på (125, 125), du trenger ikke engang å trekke det



Trinn 5:. Gjør Script Mer Codey

dette er en slags kjedelig resultat, skjønt. La oss gjøre ting mer komplisert:
for (i = 0; i < 8; i ++) {fl.getDocumentDOM () addNewOval ({venstre:. (I * 50), øverst: (i * 50), rett :( i * 50) 50, bunn: (i * 50) 50});}

Jepp - Java har for-løkker
også. Denne gangen kjører JSFL ved å bytte til FLA klikke Kommandoer > . Run Command
, deretter finne skriptet fil på harddisken

Sjekk ut resultatet:

Allerede er det klart at dette kan være svært nyttig for å ta vare på repetitive, presise oppgaver . For eksempel ville det være lett å endre denne koden for å lage et rutenett av sirkler ... og derfra er det et lite skritt for å skape et rutenett av knapper. Ingen flere kopiere, lime inn, og forsiktig nudging symboler rundt scenen for å stille dem opp ordentlig



Trinn 6:. Trace

Det er alltid godt å ha en trace ()
kommandoen tilgjengelig når du tester noe nytt. I JSFL, har vi fl.trace ()
funksjon, som tar en enkelt streng (i motsetning til AS3 er trace ()
, noe som kan ta flere samtidig) og skriver det til Output panel. Prøv selv:
for (var i = 0; i < 8; i ++) {fl.getDocumentDOM () addNewOval ({venstre:. (I * 50), øverst: (i * 50), rett :( i * 50) 50, bunn: (i * 50) 50}); fl.trace ( "jeg er:" + i.toString ());}

Resultatet:
i er: 0i er: 1i er: 2i er: 3i er: 4i er: 5i er: 6i er : 7



Trinn 7: Legg kommando til meny

å måtte holde JSFL åpen eller bla til den når du vil bruke det ville være en reell smerte. I stedet kan du legge den til kommandoer menyen, så det er bare et par klikk unna. (Og når den er der, du kan selv tildele det en tastatursnarvei.)

Alt du trenger å gjøre er å flytte example.jsfl filen til \\ Command \\ mappe Flash-tallet. Plasseringen av denne mappen avhenger av OS, men:

Mac OS X: [harddisk] Twitter /Users / brukernavn Twitter /Bibliotek /Application Support /Adobe /Flash CS3 / språket Twitter /konfigurasjon /Commands

Windows XP: [boot-stasjon]
\\ Documents and Settings \\ brukernavn
\\ Local innstillinger \\ Programdata data~~POS=HEADCOMP \\ Adobe \\ Flash CS3 \\ språket
\\ Configuration \\ Kommandoer

Windows Vista: [boot-stasjon]
\\ Users \\ brukernavn
\\ Lokale innstillinger \\ Programdata data~~POS=HEADCOMP \\ Adobe \\ Flash CS3 \\ språket
\\ Configuration \\ Kommandoer

Windows Vista (alt): [boot-stasjon]
\\ Users \\ brukernavn
\\ AppData \\ Local \\ Adobe \\ Flash CS3 \\ språket
\\ Configuration \\ Kommandoer

Windows 7: [boot-stasjon]
\\ Users \\ brukernavn
\\ Lokale innstillinger \\ Programdata data~~POS=HEADCOMP \\ Adobe \\ Flash CS3 \\ språket
\\ Configuration \\ Kommandoer

Windows 7 (alt): [boot-stasjon]
\\ Users \\ brukernavn
\\ AppData \\ Local \\ Adobe \\ Flash CS3 \\ språket
\\ Configuration \\ Kommandoer

brukernavn
mappe vil samsvare med navnet du bruker til å logge på med, språk
vil endre seg avhengig av hva du plukket når du installerte Flash (for engelsktalende vil det trolig være en-us
eller bare no
), og hvis du bruker en nyere versjon av Flash enn CS3, den mappen vil endre seg også.

Når du har lagret i denne mappen, vil den vises i Kommandoer-menyen ved å bruke navnet av JSFL filen:

Bare klikk for å kjøre den. Du kan nå redigere JSFL fil inne Kommandoer mappe, for å få fart på sakene



Trinn 8:. Hente informasjon fra FLA

JSFL kan gjøre mer enn å kjøre lister over kommandoer. Det kan også få informasjon om FLA og elementene i det, og ta avgjørelser basert på at info

For eksempel kan vi skrive et skript for å spore hvor mange elementer er valgt for øyeblikket.
Fl. trace (fl.getDocumentDOM (). selection.length)

utvalg
objektet er faktisk en matrise med hvert element inneholder en av de valgte objektene. Det er derfor selection.length
gir oss antall objekter som er valgt

Denne enkle skript gir et innblikk i hvordan Flash fungerer. Prøve å tegne noen sirkler, velge dem alle, og kjører skriptet . Det vil returnere "1". Lag noen tekstfelt, velg dem alle, og kjør skriptet, og det vil returnere et tall som tilsvarer antall tekstfelt



Trinn 9:. Finne den typen et objekt

Vi kan få informasjon om objektene inne som valg, også:
for (var i = 0; i < fl.getDocumentDOM () selection.length; i ++.) {fl.trace (fl.getDocumentDOM () .selection [i] .elementType);}

jeg har to tekstfelt og en haug med sirkler valgt, og dette skriptet utganger:
texttextshape

for en fullstendig liste over objekter og funksjoner, utforske . Utvide Flash bok i Adobe LiveDocs



Trinn 10: Endre objekter på Stage

Her er et enkelt skript som saft alle de utvalgte figurene på scenen - men ingenting annet:
for (var i = 0; i <. fl.getDocumentDOM () selection.length; i ++) {if (. fl.getDocumentDOM () utvalg [i] .elementType == "shape") {fl.getDocumentDOM ( ) .selection [i] .scaleY = 2; }}

Før:

... og etter:



Trinn 11: "Buttonize" Oversikt

Du har fått grunnleggende. Nå er det tid for kjøtt av denne opplæringen.

Vi kommer til å lage et skript som tar et tekstfelt og gjør den til en knapp. Jeg vil gå gjennom trinnene dette skriptet vil gjenskape; starte en ny FLA og sette et tekstfelt i midten, så følg med:


    Klikk på teksten

    Konverter det til et symbol

    Gå inn i redigeringsmodus

    Opprett ny nøkkel. over, ned, traff

    Tegn et solid rektangel som dekker teksten for å definere treffet området

    det er ganske enkelt, når du ser det oppført sånn. Men hvordan gjør vi alt dette i JSFL? Hva er skriptet

    Vi kunne se alt opp i LiveDocs, men det er en mye enklere måte ...



    Trinn 12: The History Panel

    Klikk på Vindu > Andre Paneler > Historie
    å få opp historikkpanelet:

    De er alle trinnene vi trenger. Hvis bare de var i JSFL ...



    Trinn 13: The History Panel Opp i JSFL

    Å, rett, de er i JSFL. Klikk på denne lille knappen:

    ... klikk View > Javascript Panel
    :

    Resultat:.

    Det er ikke akkurat det vi trenger, men det gir oss noen indikasjon på hvor du skal lete i LiveDocs



    trinn 14: Kopier historie

    Klikk på den øverste historien elementet du trenger og shift-klikk bunnen for å velge alle trinnene i mellom. Du kan Ctrl-klikk (CMD-klikk på Mac) individuelle elementer for å oppheve dem fra denne listen (jeg har fjernet noen unødvendige museklikk fra mine). Deretter klikker du den lille menyknappen og velg Kopier Steps
    . Nå kan du lime dem inn i et JSFL fil:
    fl.getDocumentDOM () convertToSymbol ( 'knapp', '', 'øverst til venstre'); Var lib = fl.getDocumentDOM () bibliotek; if (lib... getItemProperty ( 'linkageImportForRS') == true) {lib.setItemProperty ( 'linkageImportForRS', false);} else {lib.setItemProperty ( 'linkageExportForAS', false); lib.setItemProperty ( 'linkageExportForRS', false);} lib. setItemProperty ( 'scalingGrid', false);fl.getDocumentDOM().enterEditMode('inPlace');fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().addNewRectangle({left:125.0, top: 133, høyre: 344,9, bunn. 207}, 0);

    Lagre dette som Buttonize.jsfl

    (Alternativt kan du klikke på Lagre-knappen for å opprette en JSFL fil i Kommandoer katalogen , i hvilket tilfelle skriptet vil ha kommentarer for å forklare hvert trinn)



    trinn 15:. Test script

    La oss teste skriptet som det er akkurat nå, slik at vi kan få en god ide om hva vi trenger å forbedre. Starte en annen tomt FLA, oppretter et tekstfelt (legg den i en annen posisjon, med en annen tekst), klikk på den, og kjøre JSFL.

    Fungerte det? Min var ikke en suksess:

    Vi ser at vi må flytte boksen slik at dens størrelse og posisjon likt det i tekstfeltet



    Trinn 16:. Få tekst~~POS=TRUNC Dimensjoner

    Heldigvis har vi allerede vet hvordan å få informasjon om et valgt element. Vi kan gjette hva dimensjons egenskapene til det valgte objektet vil bli kalt; la oss prøve å spore dem og se om vi har rett:
    fl.trace (. fl.getDocumentDOM () utvalg [0] x), fl.trace (. fl.getDocumentDOM () utvalg [0] .Y); (. fl.getDocumentDOM () utvalg [0] .width) fl.trace, (. fl.getDocumentDOM () utvalg [0] .height) fl.trace;

    Surprise, surprise, ja, det fungerer fint. Nå kan vi bruke denne informasjonen til å tegne rektangelet:
    fl.getDocumentDOM () addNewRectangle ({venstre:.. Fl.getDocumentDOM () utvalg [0] .x, topp. Fl.getDocumentDOM () utvalg [0] .Y, høyre:.. fl.getDocumentDOM () utvalg [0] .x + fl.getDocumentDOM () utvalg [0] .width, bunn. fl.getDocumentDOM () utvalg [0] .Y + fl.getDocumentDOM ( .) .selection [0] .height}, 0);

    Prøv det ut:

    ... Oh



    Trinn 17: Lagres Informasjon før Selection endringer

    Hva har skjedd? Vel, når manuset kom inn redigeringsmodus, endret valg; vi er inne i Button symbol, slik at vi ikke har det valgt noe mer. Se opp for den slags feil når du arbeider med JSFL

    Dette er lett å fikse, men -. Vi må bare lagre forlot
    , toppen
    , høyre
    , og nederst
    egenskaper tidlig, før valg endringer:
    Var textLeft = fl.getDocumentDOM () utvalg [0] .x; Var textTop = fl.getDocumentDOM ().. utvalg [0] .Y;.. Var textRight = fl.getDocumentDOM () utvalg [0] .x + fl.getDocumentDOM () utvalg [0] .width;. Var textBottom = fl.getDocumentDOM () utvalg [0]. y + fl.getDocumentDOM () utvalg [0] .height;. fl.getDocumentDOM () convertToSymbol ( 'knapp', '', 'øverst til venstre.'); Var lib = fl.getDocumentDOM () bibliotek,. if (lib .getItemProperty ( 'linkageImportForRS') == true) {lib.setItemProperty ( 'linkageImportForRS', false);} else {lib.setItemProperty ( 'linkageExportForAS', false); lib.setItemProperty ( 'linkageExportForRS', false);} lib .setItemProperty ( 'scalingGrid', false);fl.getDocumentDOM().enterEditMode('inPlace');fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().getTimeline().convertToKeyframes();fl.getDocumentDOM().addNewRectangle({left:textLeft, top: textTop, høyre: textRight, bunn: textBottom}, 0);

    Fungerte det? Det gjorde for meg



    Trinn 18: Se etter potensielle feil

    Hva skjer hvis vi kjører kommandoen uten å merke teksten? Vi får den samme feilen som før:

    Vi bør sjekke for å se om noen objekter er valgt før du gjør noe:
    if (fl.getDocumentDOM () selection.length > 0). {Var textLeft = . fl.getDocumentDOM () utvalg [0] .x; Var textTop = fl.getDocumentDOM () utvalg [0] .Y.; Var textRight = fl.getDocumentDOM () utvalg [0] .x + fl.getDocumentDOM () utvalg [0] .width..; Var textBottom = fl.getDocumentDOM () utvalg [0] .Y + fl.getDocumentDOM () utvalg [0] .height..; . Fl.getDocumentDOM () convertToSymbol ( 'knapp', '', 'øverst til venstre'); . Var lib = fl.getDocumentDOM () bibliotek; if (lib.getItemProperty ( 'linkageImportForRS') == true) {lib.setItemProperty ( 'linkageImportForRS', false); } else {lib.setItemProperty ( 'linkageExportForAS', false); lib.setItemProperty ( 'linkageExportForRS', false); } Lib.setItemProperty ( 'scalingGrid', false); . Fl.getDocumentDOM () enterEditMode ( 'INPLACE'); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () addNewRectangle ({venstre: textLeft, topp: textTop, høyre: textRight, bunn: textBottom}, 0);}

    Egentlig kan vi gjøre bedre enn det ... hva med å sjekke om nøyaktig ett tekstfelt
    har blitt valgt?
    if (fl.getDocumentDOM (). selection.length == 1) {if (fl.getDocumentDOM (). valg [0] .elementType == "tekst" .) {var textLeft = fl.getDocumentDOM () utvalg [0] .x; Var textTop = fl.getDocumentDOM () utvalg [0] .Y.; Var textRight = fl.getDocumentDOM () utvalg [0] .x + fl.getDocumentDOM () utvalg [0] .width..; Var textBottom = fl.getDocumentDOM () utvalg [0] .Y + fl.getDocumentDOM () utvalg [0] .height..; . Fl.getDocumentDOM () convertToSymbol ( 'knapp', '', 'øverst til venstre'); . Var lib = fl.getDocumentDOM () bibliotek; if (lib.getItemProperty ( 'linkageImportForRS') == true) {lib.setItemProperty ( 'linkageImportForRS', false); } else {lib.setItemProperty ( 'linkageExportForAS', false); lib.setItemProperty ( 'linkageExportForRS', false); } Lib.setItemProperty ( 'scalingGrid', false); . Fl.getDocumentDOM () enterEditMode ( 'INPLACE'); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () getTimeline () convertToKeyframes (.); . Fl.getDocumentDOM () addNewRectangle ({venstre: textLeft, topp: textTop, høyre: textRight, bunn: textBottom}, 0); }}

    Dette åpner opp alle slags andre alternativer. Hvis flere elementer er valgt, kan du sløyfe gjennom dem alle, og slå dem alle inn i knappene. Hvis et objekt er merket som ikke er et tekstfelt, kan du behandle det på en annen måte - kanskje det ikke ville trenge et rektangel for sin Hit form



    Trinn 19:. Navn på knappen etter tekst

    En fin detalj ville være å gi Button symbol samme navn som teksten den inneholder. Det ville holde biblioteket ryddig, også. Men det er ingenting i vår skriptet til å foreslå hvordan vi kan gjøre det.

    ikke
    vet at JSFL å konvertere et utvalg til et symbol er fl.getDocumentDOM (). ConvertToSymbol ()
    , takket være historikkpanelet. Hvis du ser at opp i LiveDocs, vil du finne at den andre parameteren (som historikkpanelet manus tomt) kalles navn
    , og beskrives slik:

    En streng som spesifiserer navnet på den nye symbol, som må være unik. Du kan sende inn en tom streng for å ha denne metoden skape et unikt symbol navn for deg.

    Bingo! Selvfølgelig, vet vi ikke hva teksten sier ...



    Trinn 20: Få Text

    Vi kunne ha en gjetning:
    fl.trace (fl .getDocumentDOM () utvalg [0] .text);.

    Dessverre denne avkastningen udefinert
    . Ah vel

    For ikke å bekymre deg -. En rask skanning gjennom LiveDocs avslører denne siden på tekstobjektet. I det finner vi funksjonen vi leter etter: text.getTextString ()

    Legg så til skriptet:..
    Var textLeft = fl.getDocumentDOM () utvalg [0] .x; . Var textTop = fl.getDocumentDOM () utvalg [0] .Y;.. Var textRight = fl.getDocumentDOM () utvalg [0] .x + fl.getDocumentDOM () utvalg [0] .width; Var textBottom = fl. . getDocumentDOM () utvalg [0] .Y + fl.getDocumentDOM () utvalg [0] .height;.. Var textText = fl.getDocumentDOM () utvalg [0] .getTextString (); fl.getDocumentDOM () convertToSymbol (. "knappen", textText, 'øverst til venstre.');

    Test det

    Fantastisk



    Wrap Up

    Buttonize er en hendig liten kommando til. har tilgjengelig hvis du trenger å spotte opp en UI raskt, men det var ikke poenget med opplæringen. Målet var å få fatt i JSFL, og se hvor det kunne brukes. Jeg håper at neste gang du står overfor en times arbeid for kjedelige Flash husarbeid, vil du finne ut hvordan du kan automatisere det med et skript på halve tiden :)