Vi gör några ändringar på Activetuts +. Från och med nu kommer våra tutorials att använda klassbaserad kod, i stället för tidslinjekod, om möjligt. Denna Snabba Tips förklarar vad du behöver veta.
Jag ska erkänna det - ibland är kodning helt på tidslinjen användbar. Det är ett snabbt sätt att testa en effekt, och det enklaste sättet att synkronisera åtgärder till specifika ramar för en animering.
Men för alla projekt som bygger mer på kod än på animering finns det allvarliga nackdelar. Alla dina ActionScript är fångade inuti FLA-filen; du kan inte dela upp programmeringen mellan olika utvecklare, du måste kopiera och klistra in kod om du vill återanvända den och du är tvungen att använda Flash: s actionspanel.
Använda klassfiler sätter din kod fri. Och det är verkligen inte svårare än att koda på tidslinjen; det innebär bara lite mer setup. Jag går igenom dig genom att skapa ett Flash-projekt som använder klasser och sedan bryta ner en klassfil i detalj.
(En del av anledningen till att vi byter till klasser är att underlätta för AS3-utvecklare som inte använder Flash själv för att följa våra handledning. Om du är en av dem, förväntar jag mig att du är van vid att hantera klasser redan , men du kan alltid läsa den här snabba tipsen som en uppdatering - ignorera bara bitarna om Flash!)
Jag är säker på att du redan vet hur man gör det här. Öppna Flash och klicka Fil> Ny ... Flash-fil (ActionScript 3.0). Spara det vart du vill. Jag har kallat min Example.fla, men det spelar ingen roll vilket namn du väljer.
Klick Fil> Ny ... ActionScript-fil. Spara detta som Main.as i samma mapp som din FLA.
Den här filen är där vi ska sätta koden som driver FLA själv, men hur kommer Flash att veta hur man hittar den?
Du kan ha dussintals AS-filer i samma mapp som FLA, så Flash vill inte gissa vilken som ska användas. Vi måste berätta det.
Byt till markeringsverktyget (Genväg: V), se till att du inte har valt något (tryck Ctrl-Shift-A). Öppna Egenskaper-panelen (Fönster> Egenskaper).
Om du använder Flash CS3 så kommer det att se ut så här:
Stiga på Huvudsaklig i rutan märkt "Dokument klass" - det är att matcha namnet på din ActionScript-fil, minus ".as" filtillägg ...
Om du använder Flash CS4 så kommer det att se ut så här:
I det här fallet måste du ange Huvudsaklig i rutan märkt "Klass". Av någon anledning släppte Adobe dokumentet "bit".
Du behöver inte behålla alla dina filer i samma katalog. Kolla in den här Snabbtips-skärmbilden om du vill veta hur du flyttar saker runt.
Öppna din Main.as-fil och klistra in följande kod:
paket import flash.display.MovieClip; public class Main utökar MovieClip public function Main ()
Detta är en grundläggande tom dokument klass. Det är den minsta mängd kod vi kan skriva som faktiskt kommer att köras. Låt mig bryta ner det:
Paketets sökord berättar för Flash att hela koden mellan sina lockiga axlar är en del av en enda grupp.
Skrift klass huvud grupperar också kod, men på ett annat sätt. Klasser innehåller funktioner och variabler; Paketen innehåller klasser och importdeklarationer.
Notera: du måste ge din klass samma namn som AS-filen: Huvudsaklig.
Vad sägs om offentlig? Tja, det betyder bara att andra klasser i din kod kommer att kunna se den här klassen.
Den här klassen Huvudsaklig kommer att driva vår FLA. Som standard är vår FLA ett filmklipp (det har en tidslinje).
Vi vill Huvudsaklig för att kunna göra allt som ett filmklipp kan göra, plus mer baserat på koden som vi skriver. Med andra ord vill vi förlänga funktionaliteten hos en vanlig Filmklipp.
(Ibland behöver vi inte göra någon animering på scenens huvudsakliga tidslinje, i det här fallet behöver vi inte förlänga MovieClip, och vi kan bara förlänga Sprite istället. MovieClip själv utökar Sprite, men lägger till extra funktioner för animering, som nextframe () fungera. Så om du inte är säker på om du ska förlänga MovieClip eller Sprite, gå till MovieClip - det är säkrare!)
MovieClip är själv en klass.
Flash håller inte automatiskt reda på var alla dess klassfiler är lagrade. för vår utökar MovieClip kod till jobbet, måste vi berätta för Flash var att hitta MovieClip-klassen. Det är vad importera linjen gör.
Importera uttalanden går alltid in i paketet och utanför klassen, högst upp.
Varje klass innehåller en funktion med samma namn som klassen. Det heter konstruktör fungera.
Koden i den här funktionen körs när ett objekt av den här typen av klass skapas - i vårt fall kommer koden mellan dessa lockade hållare att köras när SWF är laddad.
Oroa dig inte om du känner att du inte förstår allt detta ännu. När du börjar börja använda klasser och skriva själv, kommer det alla att klara på plats.
Som jag sa i steg 5 innehåller konstruktörsfunktionen den allra första koden som ska köras när din SWF är laddad. Så låt oss sätta in något för att se till att allting fungerar:
paket import flash.display.MovieClip; public class Main utökar MovieClip public function Main () trace ("Ja, det fungerar");
Linje 8 är den enda nya där. Testa din SWF på vanligt sätt (Kontroll> Test Movie). Om allt är bra borde du se "Ja, det fungerar" dyker upp i Utmatningspanelen. Om inte…
Om ingen av dessa frågor hjälper, vänligen skriv en kommentar.
Försök byta din Main.as-kod med följande:
paket import flash.display.MovieClip; public class Main utökar MovieClip public function Main () var hälsning: String = "Hej"; spår (hälsning);
Enkelt, eller hur? Vi har just skapat en ny strängvariabel inom konstruktörsfunktionen. Låt oss nu lägga till en ny funktion:
paket import flash.display.MovieClip; public class Main utökar MovieClip public function Main () var hälsning: String = "Hej"; changeGreetingToFrench (); spår (hälsning); public function changeGreetingToFrench (): void greeting = "Bonjour";
Det finns några saker att notera här.
För det första går den nya funktionen inne i klassen, och efter konstruktören är enligt konventet den första funktionen i klassen.
För det andra är den nya funktionen offentlig; När man kodar inuti en klass (och inte på tidslinjen) är det bra att lägga "public" (eller "privat" eller "skyddad" men jag lämnar dem för ett annat inlägg) i början av raden som definierar funktionen . Det är bara ett sätt att låta andra klasser veta om de kan få tillgång till det.
För det tredje slutar den nya funktionens definition med :ogiltig. Det betyder bara att det inte returnerar ett värde. Konstruktörsfunktioner behöver inte :ogiltig eftersom de kan inte returnera ett värde.
Om du testar den här filmen får du ett felmeddelande:
Main.as, Linje 15: 1120: Tillgång till odefinierad fastighetshälsning.
När du skapar en variabel i en funktion, kan den inte nås av andra funktioner. Om du vill att varje funktion i klassen ska kunna komma åt variabeln, måste du deklarera den i klassen men utanför alla funktioner:
paket import flash.display.MovieClip; public class Main utökar MovieClip public var greeting: String = "Hello"; allmän funktion Main () changeGreetingToFrench (); spår (hälsning); public function changeGreetingToFrench (): void greeting = "Bonjour";
Precis som med funktioner, om du förklarar en variabel utanför en funktion måste du starta den med "public" (eller "privat" eller "skyddad"). Till skillnad från funktioner bör variabler definieras ovan konstruktören.
Testa din film nu och du ska äntligen få en trevlig hälsning på franska. Hur användbart!
Så det här är inte exakt ett spännande resultat, men förhoppningsvis känner du dig nu att följa handledning som inte kodar på tidslinjen.
Jag vill verkligen se till att alla förstår hur man använder en dokumentklass, så snälla, om något av detta var oklart, skriv en anteckning i kommentarerna. När vi har sorterat ut förvirringen, ska jag redigera Quick Tip för att underlätta för nästa person att förstå. Tack :)