Hoe een documentklasse in Flash te gebruiken

We voeren enkele wijzigingen door bij Activetuts +. Vanaf nu zullen onze tutorials waar mogelijk gebruikmaken van op klassen gebaseerde code in plaats van de tijdlijncode. Deze Quick Tip legt uit wat je moet weten.


Waarom klassenbestanden gebruiken?

Ik geef het toe - soms is het handig om helemaal op de tijdlijn te coderen. Het is een snelle manier om een ​​effect uit te testen en de eenvoudigste manier om acties te synchroniseren met specifieke frames van een animatie.

Maar voor elk project dat meer afhankelijk is van code dan van animatie, zijn er serieuze nadelen. Al uw ActionScript zit vast in het FLA-bestand; je kunt de programmering niet splitsen tussen verschillende ontwikkelaars, je moet code kopiëren en plakken als je het opnieuw wilt gebruiken, en je bent gedwongen om het Actions Panel van Flash te gebruiken.

Als u klasbestanden gebruikt, wordt uw code gratis. En het is echt niet moeilijker dan coderen op de tijdlijn; het gaat gewoon om een ​​beetje meer setup. Ik zal u begeleiden bij het maken van een Flash-project dat klassen gebruikt en vervolgens een klassenbestand in detail opsplitsen.

(Een deel van de reden waarom we naar klassen overschakelen is om het voor AS3-ontwikkelaars die geen Flash zelf gebruiken gemakkelijker te maken om onze tutorials te volgen. Als je een van hen bent, verwacht ik dat je al gewend bent om met klassen om te gaan , maar je kunt deze Quick Tip altijd als een opfriscursus lezen - negeer gewoon de stukjes over Flash!)


Stap 1: Maak een FLA

Ik weet zeker dat je al weet hoe je dit moet doen. Open Flash en klik Bestand> Nieuw ... Flash-bestand (ActionScript 3.0). Bewaar het waar je maar wilt. Ik heb de mijne gebeld Example.fla, maar het maakt niet uit welke naam je kiest.


Stap 2: Maak een ActionScript-bestand

Klik Bestand> Nieuw ... ActionScript-bestand. Bewaar deze als Main.as in dezelfde map als uw FLA.

In dit bestand plaatsen we de code die de FLA zelf voedt, maar hoe weet Flash hoe deze te vinden?


Stap 3: Koppel de FLA aan het AS-bestand

Je hebt misschien tientallen AS-bestanden in dezelfde map als de FLA, dus Flash wil niet raden welke te gebruiken. We moeten het vertellen.

Schakel over naar het selectiegereedschap (sneltoets: V) en zorg dat er niets geselecteerd is (druk op Ctrl-Shift-A). Open het paneel Eigenschappen (Venster> Eigenschappen).

Als u Flash CS3 gebruikt, ziet het er als volgt uit:

Flash CS3 Properties-paneel

invoeren Hoofd in het vak met de naam "Documentklasse" - dat wil zeggen dat deze overeenkomt met de naam van uw ActionScript-bestand, minus de extensie ".as" ...

Als u Flash CS4 gebruikt, ziet het er als volgt uit:

Flash CS4 Properties-paneel

In dit geval moet u invoeren Hoofd in het vak met het label "Klasse". Om de een of andere reden liet Adobe het bit "Document" vallen.


Stap 4: (Optioneel) Reorganiseer uw mappenstructuur

U hoeft niet al uw bestanden in dezelfde map te bewaren. Bekijk deze Quick Tip screencast als je wilt weten hoe je dingen kunt verplaatsen.


Stap 5: schrijf uw documentklasse

Open uw Main.as bestand en plak de volgende code:

 pakket import flash.display.MovieClip; public class Main breidt MovieClip uit public function Main () 

Dit is een standaard lege documentklasse. Het is de kleinste hoeveelheid code die we kunnen schrijven die daadwerkelijk zal worden uitgevoerd. Laat me het afbreken:

Het sleutelwoord van het pakket vertelt Flash dat alle code tussen de accolades deel uitmaakt van een enkele groep.

Het sleutelwoord van het pakket vertelt Flash dat alle code tussen de accolades deel uitmaakt van een enkele groep.

De klasse sleutelwoordgroepen functies en variabelen samen.

schrift klasse Main ook groepen code samen, maar op een andere manier. Klassen bevatten functies en variabelen; pakketten bevatten klassen en importinstructies.

Notitie: je moet je klas dezelfde naam geven als het AS-bestand: Hoofd.

Hoe zit het met openbaar? Nou, dat betekent alleen dat andere klassen in uw code deze klasse kunnen zien.

We willen dat onze klasse de functionaliteit van een gewone MovieClip uitbreidt - vandaar dat 'Class Main MovieClip uitbreidt'.

Deze klas Hoofd gaat onze FLA aansturen. Standaard is onze FLA een filmclip (deze heeft een tijdlijn).

Wij willen Hoofd om alles te kunnen doen wat een filmclip kan doen, plus meer op basis van de code die we schrijven. Met andere woorden, we willen uitbreiden de functionaliteit van een regulier Filmclip.

(Soms hoeven we geen animatie op de hoofdtijdlijn van de stage te doen, in dit geval hoeven we MovieClip niet uit te breiden en kunnen we Sprite in plaats daarvan uitbreiden. MovieClip breidt zelf Sprite uit, maar voegt extra functies toe voor animatie, zoals de nextFrame () functie. Dus als je niet zeker weet of je MovieClip of Sprite moet verlengen, kies dan voor MovieClip - het is veiliger!)

De 'import'-regel vertelt Flash waar de daadwerkelijke MovieClip te vinden is, zodat we deze kunnen verlengen.

MovieClip is zelf een klasse.

Flash houdt niet automatisch bij waar al zijn klassebestanden zijn opgeslagen; om voor onze breidt MovieClip uit code om te werken, moeten we Flash vertellen waar de MovieClip-klasse te vinden is. Dat is wat de importeren lijn doet.

Importstatements gaan altijd binnen het pakket en buiten de klas, bovenaan.

Elke klasse bevat een functie met dezelfde naam als de klas. De code erin wordt uitgevoerd wanneer een object van dit type klasse wordt gemaakt - in ons geval wanneer de SWF is geladen.

Elke klasse bevat een functie met dezelfde naam als de klas. Het heet de bouwer functie.

Alle code in deze functie wordt uitgevoerd wanneer een object van dit type klasse wordt gemaakt - in ons geval wordt de code tussen deze accolades uitgevoerd wanneer de SWF wordt geladen.

Maak je geen zorgen als je het gevoel hebt dat je dit nog niet helemaal begrijpt. Als je eenmaal begint met het gebruiken van lessen en het schrijven van je eigen lessen, schiet het allemaal vast.


Stap 6: Maak het do Iets

Zoals ik in stap 5 al zei, bevat de constructorfunctie de allereerste code die moet worden uitgevoerd wanneer uw SWF wordt geladen. Dus laten we er iets in doen om te zorgen dat alles werkt:

 pakket import flash.display.MovieClip; public class Main breidt MovieClip uit public function Main () trace ("Yep, it's work"); 

Lijn 8 is daar de enige nieuwe. Test uw SWF op de gebruikelijke manier (Besturing> Film testen). Als het goed is, zou je moeten zien "Yep, it's work" verschijnen in het Output paneel. Als niet…

  • Hebt u de wijziging die u in Main.as hebt gemaakt opgeslagen?
  • Is de documentklasse van uw FLA ingesteld op Hoofd?
  • Test je zeker de film Example.fla?

Als geen van deze vragen helpt, plaats dan een reactie.


Stap 7: Probeer iets ingewikkelder

Probeer je Main.as-code te vervangen door deze:

 pakket import flash.display.MovieClip; public class Main breidt MovieClip uit public function Main () var greeting: String = "Hello"; trace (groet); 

Eenvoudig, toch? We hebben zojuist een nieuwe String-variabele gemaakt in de constructorfunctie. Laten we nu een nieuwe functie toevoegen:

 pakket import flash.display.MovieClip; public class Main breidt MovieClip uit public function Main () var greeting: String = "Hello"; changeGreetingToFrench (); trace (groet);  public function changeGreetingToFrench (): void greeting = "Bonjour"; 

Hier zijn een paar dingen om op te merken.

Ten eerste gaat de nieuwe functie naar de klas, en na de constructor - bij conventie is de constructor de eerste functie in de klas.

Ten tweede is de nieuwe functie openbaar; bij het coderen in een klasse (en niet op de tijdlijn) is het een goede gewoonte om "public" (of "private" of "protected" te plaatsen, maar ik laat die voor een andere post achter) aan het begin van de regel die de functie definieert . Het is gewoon een manier om andere klassen te laten weten of ze er toegang tot hebben.

Ten derde eindigt de definitie van de nieuwe functie : void. Dit betekent alleen dat het geen waarde teruggeeft. Constructorfuncties hebben de functie niet nodig : void omdat ze kan niet retourneer een waarde.

Als je deze film test, krijg je een foutmelding:

Main.as, regel 15: 1120: toegang tot niet-gedefinieerde eigenschapswensen.

Wanneer u een variabele binnen een functie maakt, kan deze niet worden geopend door andere functies. Als u wilt dat elke functie in de klas toegang heeft tot de variabele, moet u deze binnen de klas declareren, maar buiten alle functies:

 pakket import flash.display.MovieClip; public class Main breidt MovieClip uit public var greeting: String = "Hello"; public function Main () changeGreetingToFrench (); trace (groet);  public function changeGreetingToFrench (): void greeting = "Bonjour"; 

Net als bij functies, als u een variabele declareert buiten een functie, moet u deze starten met "public" (of "private" of "protected"). In tegenstelling tot functies moeten variabelen worden gedefinieerd bovenstaande de constructeur.

Test je film nu en je krijgt eindelijk een leuke begroeting in het Frans. Hoe nuttig!


Afsluiten

Dit is dus niet echt een opwindend resultaat, maar hopelijk kun je nu tutorials volgen die niet coderen op de tijdlijn.

Ik wil echt zeker weten dat iedereen begrijpt hoe een documentklasse moet worden gebruikt, dus als dit niet duidelijk was, kun je een opmerking plaatsen in de opmerkingen. Zodra we de verwarring hebben opgelost, zal ik de Snelle tip bewerken om het gemakkelijker te maken voor de volgende persoon om het te begrijpen. Bedankt :)