In deze zelfstudie gebruiken we de AS3 LocalConnection-klasse om gegevens te verzenden en te ontvangen tussen twee verschillende SWF-bestanden. Vandaag zullen we dit gebruiken om muisbewegingen in één SWF te detecteren en in een andere te spiegelen.
Laten we eens kijken naar het uiteindelijke resultaat waar we naartoe zullen werken. Hieronder staan twee compleet verschillende bestanden.
Deze tutorial is opgesplitst in twee delen. De eerste zal zich concentreren op de verzendende SWF en de tweede zal betrekking hebben op het bouwen van de ontvangende SWF. Ik zal de documentklasse ook tijdens deze zelfstudie gebruiken.
Maak eerst een nieuw ActionScript 3.0-bestand.
Wijzig vervolgens het formaat van het bestand in 600 px × 250 px.
Deze stap is niet noodzakelijk voor functionaliteit, maar meer voor esthetiek. Voeg je afbeelding toe aan het podium en vergrendel vervolgens de laag.
Sla uw FLA op als Sending.fla en maak vervolgens een leeg AS-bestand aan. Bewaar dit bestand in dezelfde map als uw FLA en noem het Sending.as.
Ga vervolgens terug en koppel de documentklasse aan de FLA.
Voeg een leeg pakket, klasse en constructorfunctie toe aan uw AS-bestand.
package public class Sending extends filmClip public function Sending ()
Het eerste dat we in onze documentklasse moeten doen, is alle klassen importeren die we in de toekomst nodig zullen hebben.
pakket import flash.display.MovieClip; import flash.events.Event; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.net.LocalConnection; public class Sending breidt MovieClip uit public function Sending ()
Voordat we beginnen met het verzenden van informatie met een lokale verbinding, is het het beste dat we precies leren hoe we het moeten gebruiken. Dit is heel eenvoudig en bestaat uit slechts twee delen:
Het declareren van een exemplaar van de klasse Local Connection is eenvoudig:
private var localConnection: LocalConnection = new LocalConnection ();
Vervolgens moeten we de .sturen methode. Deze methode maakt verbinding met de andere SWF en activeert vervolgens een functie in het ontvangende bestand die alle variabelen verwerkt die worden verzonden. Laten we een voorbeeld zien:
LocalConnection.send ( "_ connectionName", "methodName", variable1, variabele2);
Zowel de naam van de verbinding als de naam van de methode moeten tussen aanhalingstekens staan (omdat het strings zijn). Bovendien is het het beste om de verbindingsnaam te starten met een laag streepje (_). De naam van de methode is gewoon de naam van de functie die u wilt activeren in de ontvangende SWF. De functie, in de ontvangende SWF, krijgt de variabelen als argumenten. Laten we nu gebruiken wat we net hebben geleerd!
Hier zijn alle variabelen die we moeten verklaren:
private var localConnection: LocalConnection = new LocalConnection (); privé var mX: Number; private var mY: Number;
Na het declareren van een exemplaar van onze lokale verbinding, maken we twee variabelen. mX zal de 'x' waarde van de muis en houden mijn zal de 'y' waarde van de muis behouden. Deze code moet vóór de constructorfunctie worden geplaatst, maar in de klas.
De volgende is de constructorfunctie. Deze functie bevat slechts één regel: het toevoegen van een gebeurtenislistener voor de Event.ENTER_FRAME evenement. We zullen de functie die het in de volgende stap noemt, bespreken. Dit is de voltooide constructorfunctie:
public function Sending () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true);
In de vorige stap hebben we een gebeurtenislistener gemaakt die deze functie eenmaal per frame aanroept. Deze functie zal twee dingen doen. De eerste is om de variabelen in te stellen mX en mijn gelijk aan die van de muis 'X' en 'Y' positie respectievelijk. De tweede is om deze twee variabelen via de lokale verbinding naar het andere SWF-bestand te verzenden.
Hier is de voltooide functie:
private function mainLoop (e: Event): void mX = mouseX; mY = mouseY; LocalConnection.send ( "_ mouseConnection", "processData", mX, MY);
Bij het verzenden van de gegevens gebruiken we "_MouseConnection" als de verbindingsnaam en "data verwerken" als de methode naam. Dit betekent dat het zal proberen te bellen processData (mX, mY)
.
We zijn bijna klaar. Het enige dat nog gedaan moet worden, is om de statusgebeurtenis af te handelen. Het LocalConnection-object verzendt statusgebeurtenissen; in dit project zullen we de evenementen niet gebruiken; Als we echter niet naar hen luisteren, ontvangen we fouten zoals deze: 'Fout # 2044: Niet-verwerkte StatusEvent :. level = fout code ='
We hebben de gebeurtenis al geïmporteerd in stap 5, dus eerst zullen we een gebeurtenislistener toevoegen voor een statusgebeurtenis in de constructorfunctie:
public function Sending () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true); localConnection.addEventListener (StatusEvent.STATUS, onStatus);
Nu moeten we een lege functie maken om op de gebeurtenis te reageren. De functie wordt aangeroepen 'OnStatus'.
persoonlijke functie onStatus (e: StatusEvent): void ;
In Sectie 1 hebben we geleerd hoe de LocalConnection-klasse te gebruiken om informatie via een verbinding naar een ander flash-bestand te verzenden. Dit is ons voltooide AS-bestand voor sectie 1:
pakket import flash.display.MovieClip; import flash.events.Event; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.net.LocalConnection; public class Sending breidt MovieClip uit private var localConnection: LocalConnection = new LocalConnection (); privé var mX: Number; private var mY: Number; public function Sending () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true); localConnection.addEventListener (StatusEvent.STATUS, onStatus); private function mainLoop (e: Event): void mX = mouseX; mY = mouseY; LocalConnection.send ( "_ mouseConnection", "processData", mX, MY); private function onStatus (e: StatusEvent): void ;
Maak eerst een nieuw ActionScript 3.0-bestand.
Wijzig vervolgens het formaat van het bestand in 600 px × 250 px.
Zoals eerder is deze stap niet noodzakelijk voor functionaliteit, maar meer voor esthetiek. Voeg je afbeelding toe aan het podium en vergrendel vervolgens de laag.
We moeten nu een object maken om de muisaanwijzer te spiegelen. Het zal hetzelfde worden gegeven X en Y waarden als de muisaanwijzer in het andere bestand via ActionScript.
In dit voorbeeld gebruik ik een pictogram van een potlood (met dank aan WeFunction). Importeer het pictogram naar het werkvlak, in een eigen laag, en converteer het vervolgens naar een MovieClip en geef het een instantienaam van cursor_mc.
Standaard bevindt het registratiepunt (het kruisje, niet de cirkel) zich in de linkerbovenhoek. Dit betekent dat wanneer het project wordt voltooid, het potlood enigszins afwijkt van de locatie van de muis. Om te herstellen, dubbelklik op het potlood en lijn het opnieuw uit, zodat het uiteinde van het potlood op het registratiepunt staat.
Net als in het eerste deel, sla je FLA op als Receiving.fla en maak vervolgens een leeg AS-bestand aan. Bewaar dit bestand in dezelfde map als uw FLA en noem het Receiving.as.
Ga vervolgens terug en koppel de documentklasse aan de FLA.
Voeg een leeg pakket, klasse en constructorfunctie toe aan uw AS-bestand.
pakket openbare klasse ontvangen breidt MovieClip uit public function Receiving ()
Importeer net als voorheen alle klassen die we nodig hebben.
pakket import flash.display.MovieClip; import flash.events.Event; import flash.events.StatusEvent; import flash.net.LocalConnection; public class Receiving breidt MovieClip uit public function Receiving ()
We zijn nu klaar om te beginnen met het schrijven van de code om de informatie van de lokale verbinding te ontvangen. Dit is wat we moeten doen:
Het declareren van een exemplaar van de klasse Local Connection is hetzelfde als hiervoor:
private var localConnection: LocalConnection = new LocalConnection ();
Vervolgens moeten we verbinding maken met de verbinding die we hebben gemaakt toen we de gegevens uit het andere bestand stuurden.
LocalConnection.connect ( "_ connectionName");
Nu stellen we de klant in. De client geeft het object aan waarop de functies worden aangeroepen. Het is normaal ingesteld op deze.
localConnection.client = this;
Ten slotte moeten we een lege functie maken die de gegevens via zijn argumenten zal ontvangen.
public function methodName (variable1: type, variable2: type ...): void ;
Nu we weten hoe we informatie kunnen ontvangen met een lokale verbinding, kunnen we beginnen met het schrijven van het script. Maak eerst een nieuwe LocalConnection-instantie bekend. Plaats dit voor de constructorfunctie in de klas.
private var localConnection: LocalConnection = new LocalConnection ();
Maak vervolgens in de constructorfunctie verbinding met de lokale verbinding en stel de client in:
public function Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this;
(Merk op dat we verbinding maken met een lokale verbinding met dezelfde ID als we gebruikten in het verzendbestand.)
Wanneer informatie werd verzonden vanuit het verzendende bestand, werd een ontvangende functie of methode genoemd. In dit project heb ik de functie gebruikt data verwerken(). De volgende functie ontvangt de X en Y coördineert als argumenten en gebruikt ze vervolgens om de positie van het potlood in te stellen.
openbare functie processData (mX: Number, mY: Number) cursor_mc.x = mX; cursor_mc.y = mY;
Deze functie moet een zijn openbaar functie zodat deze via de lokale verbinding kan worden geopend.
Net als bij hoofdstuk 1 moeten we statusgebeurtenissen verwerken omdat we een lokale verbinding gebruiken. De gebeurtenis is al geïmporteerd in stap 16, dus we moeten nu een gebeurtenislistener voor de gebeurtenissen toevoegen. Laten we een regel toevoegen aan de constructorfunctie:
public function Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this; localConnection.addEventListener (StatusEvent.STATUS, onStatus);
Vervolgens maken we een lege functie om te reageren op de gebeurtenislistener:
persoonlijke functie onStatus (e: StatusEvent): void ;
In dit tweede deel hebben we met succes informatie ontvangen van een lokale verbinding en deze verwerkt. Dit is ons voltooide AS-bestand:
pakket import flash.display.MovieClip; import flash.events.Event; import flash.events.StatusEvent; import flash.net.LocalConnection; public class Receiving breidt MovieClip uit private var localConnection: LocalConnection = new LocalConnection (); public function Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this; localConnection.addEventListener (StatusEvent.STATUS, onStatus); public function processData (mX: Number, mY: Number) cursor_mc.x = mX; cursor_mc.y = mY; private function onStatus (e: StatusEvent): void ;
In deze zelfstudie hebben we geleerd hoe u de LocalConnection-klasse gebruikt. U hebt gezien hoe u informatie kunt verzenden, informatie kunt ontvangen en hoe u statusgebeurtenissen kunt afhandelen. Deze methode wordt vaak gebruikt in webadvertenties wanneer een adverteerder een advertentie tussen twee verschillende advertentieposities op een enkele webpagina wil synchroniseren. Ditzelfde principe kan gemakkelijk worden ontwikkeld om tweerichtingscommunicatie tussen twee bestanden te omvatten.
Bedankt voor het lezen van deze tutorial; ik hoop dat je het leuk vond!