Slik bruker du en dokumentklasse i Flash

Vi gjør noen endringer på Activetuts +. Fra nå av bruker våre opplæringsprogrammer klassebasert kode, i stedet for tidslinjekode, når det er mulig. Denne raske tipsen forklarer hva du trenger å vite.


Hvorfor bruke klassefiler?

Jeg innrømmer det - noen ganger er koding helt på tidslinjen nyttig. Det er en rask måte å teste ut en effekt på, og den enkleste måten å synkronisere handlinger til bestemte rammer for en animasjon.

Men for alle prosjekter som bygger mer på kode enn på animasjon, er det alvorlige ulemper. Alt ActionScript er fanget inne i FLA-filen; Du kan ikke dele programmeringen mellom forskjellige utviklere, du må kopiere og lime inn kode hvis du vil bruke den på nytt, og du er tvunget til å bruke Flashs Handlingspanel.

Ved å bruke klassefiler setter du koden fri. Og det er egentlig ikke vanskeligere enn å kodes på tidslinjen; det innebærer bare litt mer oppsett. Jeg går deg gjennom å lage et Flash-prosjekt som bruker klasser, og deretter bryte ned en klassefil i detalj.

(En del av grunnen til at vi bytter til klasser er å gjøre det enklere for AS3-utviklere som ikke bruker Flash selv til å følge våre opplæringsprogrammer. Hvis du er en av dem, forventer jeg at du er vant til å håndtere klasser allerede , men du kan alltid lese denne Quick Tip som en oppdatering - bare ignorere bitene om Flash!)


Trinn 1: Lag en FLA

Jeg er sikker på at du allerede vet hvordan du gjør dette. Åpne Flash og klikk Fil> Ny ... Flash-fil (ActionScript 3.0). Lagre det hvor du vil. Jeg har kalt min Example.fla, men det spiller ingen rolle hvilket navn du velger.


Trinn 2: Opprett en ActionScript-fil

Klikk Fil> Ny ... ActionScript-fil. Lagre dette som Main.as i samme mappe som din FLA.

Denne filen er hvor vi skal sette koden som styrer FLA selv, men hvordan vil Flash vite hvordan du finner den?


Trinn 3: Koble FLA til AS-filen

Du kan ha dusinvis av AS-filer i samme mappe som FLA, så Flash vil ikke gjette hvilken du skal bruke. Vi må fortelle det.

Bytt til valgverktøyet (snarvei: V), og kontroller at du ikke har valgt noe (trykk Ctrl-Shift-A). Åpne Egenskaper panelet (Vindu> Egenskaper).

Hvis du bruker Flash CS3, ser det slik ut:

Flash CS3 Egenskaper Panel

Tast inn Hoved i boksen merket "Dokument klasse" - det er å matche navnet på din ActionScript-fil, minus ".as" filtypen ...

Hvis du bruker Flash CS4, ser det slik ut:

Flash CS4 Egenskaper Panel

I dette tilfellet må du skrive inn Hoved i boksen merket "Klasse". Av en eller annen grunn, Adobe droppet "Document" bit.


Trinn 4: (Valgfritt) Omorganiser mappestrukturen

Du behøver ikke å beholde alle filene dine i samme katalog. Sjekk ut denne Quick Tip screencast hvis du vil vite hvordan du beveger ting rundt.


Trinn 5: Skriv dokumentklassen

Åpne Main.as-filen din og lim inn følgende kode:

 pakke import flash.display.MovieClip; offentlig klasse Main utvider MovieClip offentlig funksjon Main () 

Dette er en grunnleggende tom dokumentklasse. Det er den minste koden vi kan skrive som faktisk vil kjøre. La meg slå det ned:

Pakkenes søkeord forteller Flash at hele koden mellom sine krøllete braces er en del av en enkelt gruppe.

Pakkenes søkeord forteller Flash at hele koden mellom sine krøllete braces er en del av en enkelt gruppe.

Klassen søkeord grupper fungerer og variabler sammen.

skrive klasse hoved grupperer også koden sammen, men på en annen måte. Klasser inneholder funksjoner og variabler; Pakker inneholder klasser og importeringserklæringer.

Merk: du må gi klassen ditt samme navn som AS-filen: Hoved.

Hva med offentlig? Vel, det betyr bare at andre klasser i koden din vil kunne se denne klassen.

Vi vil at vår klasse skal utvide funksjonaliteten til en vanlig MovieClip - derfor,

Denne klassen Hoved kommer til å drive vår FLA. Som standard er vår FLA et filmklipp (det har en tidslinje).

Vi vil Hoved for å kunne gjøre alt som et filmklipp kan gjøre, pluss mer basert på koden vi skriver. Med andre ord vil vi forlenge funksjonaliteten til en vanlig Filmklipp.

(Noen ganger trenger vi kanskje ikke å gjøre noen animasjoner på scenens hoved tidslinje, i dette tilfellet trenger vi ikke å forlenge MovieClip, og vi kan bare utvide Sprite i stedet. MovieClip selv utvider Sprite, men legger til ekstra funksjoner for animasjon, som nextFrame () funksjon. Så hvis du ikke er sikker på om du skal utvide MovieClip eller Sprite, gå til MovieClip - det er tryggere!)

Innføringslinjen forteller Flash hvor du finner den faktiske MovieClip slik at vi kan utvide den.

MovieClip er selv en klasse.

Flash følger ikke automatisk med hvor alle klassefilene er lagret; for vår strekker seg til MovieClip kode til arbeid, må vi fortelle Flash hvor du finner MovieClip-klassen. Det er det som importere linje gjør.

Importklæringene går alltid inn i pakken og utenfor klassen, øverst.

Hver klasse inneholder en funksjon med samme navn som klassen. Koden i den kjøres når et objekt av denne typen klasse er opprettet - i vårt tilfelle når SWF er lastet.

Hver klasse inneholder en funksjon med samme navn som klassen. Det kalles konstruktør funksjon.

Alle koden i denne funksjonen kjøres når et objekt av denne typen klasse er opprettet - i vårt tilfelle vil koden mellom disse krøllete stagene bli kjørt når SWF er lastet.

Ikke bekymre deg hvis du føler at du ikke forstår alt dette enda. Når du først begynner å bruke klasser og skriver din egen, vil det hele snappe på plass.


Trinn 6: Gjør det gjøre Noe

Som jeg sa i trinn 5, inneholder konstruktørfunksjonen den aller første koden som skal kjøres når SWF er lastet. Så la oss sette noe der inne for å sikre at alt fungerer:

 pakke import flash.display.MovieClip; offentlig klasse Main utvider MovieClip offentlig funksjon Main () trace ("Yep, det fungerer"); 

Linje 8 er den eneste nye der. Test SWF på vanlig måte (Kontroll> Testfilm). Hvis alt er bra, bør du se "Yep, det fungerer" dukker opp i Utdata-panelet. Hvis ikke…

  • Har du lagret endringen du gjorde til Main.as?
  • Er din FLAs dokumentklasse satt til Hoved?
  • Tester du definitivt Example.fla-filmen?

Hvis ingen av disse spørsmålene hjelper, vennligst legg inn en kommentar.


Trinn 7: Prøv noe litt mer komplekst

Prøv å erstatte Main.as-koden med dette:

 pakke import flash.display.MovieClip; offentlig klasse Main utvider MovieClip offentlig funksjon Main () var hilsen: String = "Hello"; spor (hilsen); 

Enkelt, ikke sant? Vi har nettopp opprettet en ny String-variabel inne i konstruktørfunksjonen. La oss nå legge til en ny funksjon:

 pakke import flash.display.MovieClip; offentlig klasse Main utvider MovieClip offentlig funksjon Main () var hilsen: String = "Hello"; changeGreetingToFrench (); spor (hilsen);  offentlig funksjon changeGreetingToFrench (): void greeting = "Bonjour"; 

Det er noen ting å merke seg her.

For det første går den nye funksjonen inne i klassen, og etter Konstruktøren - etter konvensjon er konstruktøren den første funksjonen i klassen.

For det andre er den nye funksjonen offentlig; når det er kodet i en klasse (og ikke på tidslinjen) er det god praksis å sette "offentlig" (eller "privat" eller "beskyttet", men jeg lar dem stå for et annet innlegg) ved starten av linjen som definerer funksjonen . Det er bare en måte å la andre klasser vite om de kan få tilgang til det.

For det tredje slutter den nye funksjonens definisjon med :tomrom. Dette betyr bare at det ikke returnerer en verdi. Konstruksjonsfunksjoner trenger ikke :tomrom fordi de kan ikke returnere en verdi.

Hvis du tester denne filmen, får du en feilmelding:

Main.as, Linje 15: 1120: Tilgang til udefinert eiendom hilsen.

Når du lager en variabel inne i en funksjon, kan den ikke nås av andre funksjoner. Hvis du vil at hver funksjon i klassen skal kunne få tilgang til variabelen, må du erklære den inne i klassen, men utenfor alle funksjonene:

 pakke import flash.display.MovieClip; offentlig klasse Main utvider MovieClip public var hilsen: String = "Hello"; offentlig funksjon Main () changeGreetingToFrench (); spor (hilsen);  offentlig funksjon changeGreetingToFrench (): void greeting = "Bonjour"; 

Akkurat som med funksjoner, hvis du erklærer en variabel utenfor en funksjon, må du starte den med "offentlig" (eller "privat" eller "beskyttet"). I motsetning til funksjoner, bør variabler defineres ovenfor konstruktøren.

Test filmen nå, og du skal endelig få en fin hilsen på fransk. Hvor nyttig!


Wrapping Up

Så dette er ikke akkurat et spennende resultat, men forhåpentligvis føler du deg nå i følge opplæringsprogrammer som ikke kodes på tidslinjen.

Jeg vil virkelig sørge for at alle forstår hvordan du bruker en dokumentklasse, så vær så snill, hvis noe av dette var uklart, legg inn et notat i kommentarene. Når vi har sortert ut forvirringen, redigerer jeg Quick Tips for å gjøre det lettere for den neste personen å forstå. Takk :)