I denna handledning använder vi AS3 LocalConnection-klassen för att skicka och ta emot data mellan två olika SWF-filer. Idag använder vi detta för att upptäcka musrörelsen i en SWF och spegla den i en annan.
Låt oss ta en titt på det slutliga resultatet vi kommer att arbeta för. Nedan finns två helt olika filer.
Denna handledning är uppdelad i två sektioner. Den första kommer att koncentrera sig på den sändande SWF och den andra kommer att involvera att bygga den mottagande SWF. Jag kommer också att använda dokumentklassen under hela denna handledning.
För det första, skapa en ny ActionScript 3.0-fil.
Ändra sedan storleken på filen till 600px × 250px.
Detta steg är inte nödvändigt för funktionalitet, men mer för estetik. Lägg till din bild i scenen och lås sedan dess lager.
Spara din FLA som Sending.fla och skapa sedan en tom AS-fil. Spara den här filen i samma mapp som din FLA och namnge den Sending.as.
Gå sedan tillbaka och länka dokumentklassen till FLA.
Lägg till ett tomt paket, klass och konstruktörsfunktion till din AS-fil.
paket public class Sending utökar MovieClip public function Sending ()
Det första vi behöver göra i vår dokumentklass är att importera alla de klasser som vi behöver i framtiden.
paket import flash.display.MovieClip; importera flash.events.Event; importera flash.events.StatusEvent; importera flash.events.MouseEvent; importera flash.net.LocalConnection; public class Sending utökar MovieClip public function Sending ()
Innan vi börjar skicka information med en lokal anslutning är det bäst att vi lär oss exakt hur vi använder den. Det här är väldigt enkelt och består av endast två delar:
Att avklara ett exempel på klassen Lokal anslutning är enkelt:
privat var localConnection: LocalConnection = new LocalConnection ();
Nästa måste vi använda .skicka metod. Den här metoden kopplas till den andra SWF-en och triggar sedan en funktion i mottagarfilen som hanterar eventuella variabler som skickas över. Låt oss se ett exempel:
LocalConnection.send ( "_ connection", "method", variable1, variabel2);
Både anslutningsnamnet och metodnamnet ska bifogas citattecken (eftersom de är strängar). Dessutom är det bäst att starta anslutningsnamnet med en understreck (_). Metodnamnet är helt enkelt namnet på den funktion som du vill utlösas i den mottagande SWF-enheten. Funktionen, i den mottagande SWF, kommer att förses med variablerna som argument. Nu, låt oss använda vad vi just har lärt oss!
Här är alla variabler som vi behöver förklara:
privat var localConnection: LocalConnection = new LocalConnection (); privat var mX: Number; privat var MY: Number;
Efter att ha förklarat en förekomst av vår lokala anslutning skapar vi två variabler. mX kommer att hålla musens "x" -värde och min kommer att hålla musens "y" -värde. Denna kod måste placeras före konstruktörens funktion, men inne i klassen.
Nästa är konstruktörfunktionen. Den här funktionen innehåller bara en rad: lägger till en händelse lyssnare för Event.ENTER_FRAME händelse. Vi kommer att täcka den funktion det ringer i nästa steg. Här är den färdiga konstruktörsfunktionen:
Offentlig funktion Sändning () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true);
I föregående steg skapade vi en händelse lyssnare som kallar denna funktion en gång varje ram. Denna funktion kommer att göra två saker. Den första är att ställa in variablerna mX och min lika med musens 'X' och 'Y' position respektive. Den andra är att skicka dessa två variabler via den lokala anslutningen till den andra SWF-filen.
Här är den färdiga funktionen:
privat funktion mainLoop (e: Event): void mX = mouseX; mY = mouseY; LocalConnection.send ( "_ mouseConnection", "processData", mX, mY);
När vi skickar data använder vi "_MouseConnection" som anslutningsnamn och "ProcessData" som metodnamn. Det betyder att det kommer att försöka ringa processdata (mX, mY)
.
Vi är nästan färdiga. Allt som återstår att göra är att hantera statushändelsen. Objektet LocalConnection skickar statushändelser; I det här projektet kommer vi inte att använda händelserna. Om vi inte lyssnar på dem kommer vi emellertid att få fel som detta: "Fel # 2044: Unhandled StatusEvent :. nivå = fel, kod ='
Vi har redan importerat händelsen i steg 5, så först lägger vi till en händelseloggare för en statushändelse i konstruktörsfunktionen:
Offentlig funktion Sändning () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true); localConnection.addEventListener (StatusEvent.STATUS, onStatus);
Nu behöver vi skapa en tom funktion för att svara på evenemanget. Funktionen heter 'OnStatus'.
privat funktion onStatus (e: StatusEvent): void ;
I avsnitt 1 har vi lärt oss hur du använder klassen LocalConnection för att skicka information via en anslutning till en annan flashfil. Här är vår färdiga AS-fil för avsnitt 1:
paket import flash.display.MovieClip; importera flash.events.Event; importera flash.events.StatusEvent; importera flash.events.MouseEvent; importera flash.net.LocalConnection; public class Sending utökar MovieClip privat var localConnection: LocalConnection = new LocalConnection (); privat var mX: Number; privat var MY: Number; Offentlig funktion Sändning () stage.addEventListener (Event.ENTER_FRAME, mainLoop, false, 0, true); localConnection.addEventListener (StatusEvent.STATUS, onStatus); privat funktion mainLoop (e: Event): void mX = mouseX; mY = mouseY; LocalConnection.send ( "_ mouseConnection", "processData", mX, mY); privat funktion onStatus (e: StatusEvent): void ;
För det första, skapa en ny ActionScript 3.0-fil.
Ändra sedan storleken på filen till 600px × 250px.
Som tidigare är detta steg inte nödvändigt för funktionalitet, men mer för estetik. Lägg till din bild i scenen och lås sedan dess lager.
Vi behöver nu skapa ett objekt för att spegla muspekaren. Det kommer att ges samma X och Y värden som muspekaren i den andra filen via ActionScript.
I det här exemplet använder jag en ikon för en penna (med tillstånd av WeFunction). Importera ikonen till scenen, i sitt eget lager och konvertera det sedan till en MovieClip och ge det ett förekomstnamn på cursor_mc.
Som standard är registreringspunkten (korset, inte cirkeln) längst upp till vänster. Det betyder att när vi fullbordar projektet kommer blyertspenningen att vara något avstånd från musens plats. För att fixa, dubbelklicka på pennan och ändra det så att penningens slut är på registreringsplatsen.
Som i första delen, spara din FLA som Receiving.fla och skapa sedan en tom AS-fil. Spara den här filen i samma mapp som din FLA och namnge den Receiving.as.
Gå sedan tillbaka och länka dokumentklassen till FLA.
Lägg till ett tomt paket, klass och konstruktörsfunktion till din AS-fil.
paket public class Mottagning utökar MovieClip public function Receiving ()
Precis som tidigare importerar du alla de klasser vi behöver.
paket import flash.display.MovieClip; importera flash.events.Event; importera flash.events.StatusEvent; importera flash.net.LocalConnection; offentlig klass Mottagning utökar MovieClip allmän funktion Mottagning ()
Vi är nu redo att börja skriva koden för att ta emot informationen från den lokala anslutningen. Här är vad vi behöver göra:
Deklarera en instans av klassen Lokal anslutning är densamma som tidigare:
privat var localConnection: LocalConnection = new LocalConnection ();
Nästa måste vi ansluta till den anslutning som vi skapade när vi skickade data från den andra filen.
LocalConnection.connect ( "_ connection");
Nu ställer vi upp klienten. Klienten anger det objekt som funktionerna kallas på. Den är normalt inställd på detta.
localConnection.client = this;
Slutligen måste vi skapa en blank funktion som kommer att ta emot data genom sina argument.
public function methodName (variabel1: typ, variabel2: typ ...): void ;
Nu när vi vet hur vi får information med en lokal anslutning, kan vi börja skriva skriptet. Förklara först en ny LocalConnection-förekomst. Placera detta före konstruktörfunktionen i klassen.
privat var localConnection: LocalConnection = new LocalConnection ();
Sedan, i konstruktörfunktionen, anslut till den lokala anslutningen och ställ in dess klient:
allmän funktion Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this;
(Observera att vi ansluter till en lokal anslutning med samma ID som vi använde i sändningsfilen.)
När information skickades från sändningsfilen namngavs en mottagningsfunktion eller metod. I det här projektet använde jag funktionen processData (). Följande funktion tar emot X och Y koordinater som argument och använder dem sedan för att ställa in pennapositionen.
public function processData (mX: Number, mY: Number) cursor_mc.x = mX; markör_mc.y = mY;
Denna funktion måste vara en offentlig funktion så att den kan nås via den lokala anslutningen.
Precis som med avsnitt 1, eftersom vi använder en lokal anslutning, måste vi hantera statushändelser. Händelsen har redan importerats i steg 16, så vi behöver nu lägga till en händelseloggare för händelserna. Låt oss lägga till en rad till konstruktörfunktionen:
allmän funktion Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this; localConnection.addEventListener (StatusEvent.STATUS, onStatus);
Då skapar vi en tom funktion för att svara på händelselyssnaren:
privat funktion onStatus (e: StatusEvent): void ;
I denna andra del har vi framgångsrikt fått information från en lokal anslutning och bearbetat den. Här är vår färdiga AS-fil:
paket import flash.display.MovieClip; importera flash.events.Event; importera flash.events.StatusEvent; importera flash.net.LocalConnection; allmän klass Mottagning utökar MovieClip privat var localConnection: LocalConnection = new LocalConnection (); allmän funktion Receiving () localConnection.connect ("_ mouseConnection"); localConnection.client = this; localConnection.addEventListener (StatusEvent.STATUS, onStatus); public function processData (mX: Number, mY: Number) cursor_mc.x = mX; markör_mc.y = mY; privat funktion onStatus (e: StatusEvent): void ;
I denna handledning har vi lärt oss hur vi använder klassen LocalConnection. Du har sett hur du skickar information, mottar information och hur man hanterar statushändelser. Denna metod används ofta i webbannonsering när en annonsör vill synkronisera en annons mellan två olika annonspositioner på en enda webbsida. Samma princip kan enkelt utvecklas för att inkludera dubbelriktad kommunikation mellan två filer.
Tack för att du läste denna handledning Jag hoppas att du tyckte om det!