MovieClip Reconstruction med SharedObject Class

Under denna handledning lär vi oss att implementera klassen SharedObject. Vi lagrar alla viktiga data i en MovieClip lokalt och sedan ladda om det nästa gång programmet öppnas!

Vi hittade denna fantastiska författare tack vare FlashGameLicense.com, platsen att köpa och sälja Flash-spel.

Tack vare manicho för hårddiskikonen.


Slutresultatförhandsvisning

Låt oss ta en titt på det slutliga resultatet vi ska arbeta för:

Doodle en bild i rutan med musen och tryck på Spara-knappen. Uppdatera den här sidan i din webbläsare och klicka på Ladda. Du kommer att se din doodle igen, har laddats från din hårddisk; Bakgrundsanimationen kommer till och med att ligga i samma ram som tidigare!


Steg 1: Ställa in vår dokumentklass

Låt oss börja med att skapa en ny .fla. Spara det och öppna egenskapspanelen i Flash. Jag använder Flash CS5, men denna handledning ska fungera med alla Flash CS-versioner. I egenskapspanelen trycker du på Redigera knappen och se till att dina inställningar är identiska med bilden nedan:


Steg 2: Inställning av dokumentklass

Nu när vi har setup vår .fla, låt oss börja vår dokumentklass. Börja med att öppna din favorit ActionScript-kodredigerare och spara en .as-fil som heter "Main.as" i samma katalog som din .fla. Gå sedan vidare till "Publicera" panelen Flash. Ange "Klass" textfältet till "Main". Öppna nu Main.as och kopiera och klistra in följande kod för att skapa vår huvudsakliga dokumentklass.

 paket importera flash.display.Bitmap; importera flash.display.BitmapData; importera flash.display.Graphics; importera flash.display.Shape; importera flash.display.Sprite; importera fl.controls.ComboBox importera flash.events.Event; importera flash.events.MouseEvent; importera flash.geom.Matrix; importera flash.geom.Rectangle; importera flash.net.SharedObject; public class Main utökar Sprite public function Main (): void 

Steg 3: Vårt huvudobjekt

Nu ska vi skapa vår huvudsakliga MovieClip. Det kommer att innehålla 3 ramar. Var och en med färgad form. Rita en röd rektangel, vrid den till en MovieClip med F8 och sätt namnet på MovieClip till "myObject". Se till att registreringspunkten är övre vänstra hörnet. Skapa sedan två nya tomma ramar inuti MovieClip. Fyll en upp med en grön triangel och den andra med en blå cirkel.

Slutresultatet ska se lite ut så här:


Steg 4: Använda en ComboBox

Nu ska vi använda en ComboBox, som i grunden är en rullgardinslista. Se till att förekomsten av myObject på scenen också är märkt myObject. Öppna sedan: Fönster> Komponenter och dra "ComboBox" -alternativet till biblioteket. Om du inte använder Flash IDE måste du högerklicka> Exportera till SWC ComboBox i biblioteket.

Nu kan vi skapa variabeln "myComboBox", ovanför konstruktörfunktionen.

 privat var myComboBox: ComboBox = ny ComboBox ()

Nästa lägg till följande kod till din Main () konstruktör:

 // Stänger myObject MovieClip på den första ramen myObject.gotoAndStop (1) // Lägger till följande Objekt i ComboBox och ger dem alla unika etiketter myComboBox.addItem (label: "Rectangle") myComboBox.addItem (label: "Circle") myComboBox.addItem (label: "Triangle") // Lägger till ComboBox addChild (myComboBox) // Flyttar den till rätt koordinater myComboBox.move (280,150)

Här är en ögonblicksbild av vad din ansökan ska se ut när du kör:


Steg 5: Ändra myObject ramar

Vi vill att vår MovieClip ska byta ramar när vi väljer ett annat objekt!

Låt oss börja med att lägga till en EventListener till vår konstruktör - Event.CHANGE-händelselysaren - som kontrollerar att när det valda objektet i ComboBox ändras. Det här är exakt när användaren väljer ett nytt ComboBox-objekt.

 myComboBox.addEventListener (Event.CHANGE, changeObjectFrame)

Nästa ska vi skapa funktionen changeObjectFrame (). Denna funktion kontrollerar för att se vad den aktuella etiketten på ComboBox är, vilket är namnet på det objekt som användaren har valt. Det går då till rätt ram av myObject för att visa den valda objekttypen.

 privat funktion changeObjectFrame (e: Event): void //myComboBox.selectedLabel är namnet på det aktuella objektet som vi definierade tidigare ... om (myComboBox.selectedLabel == "Rectangle") myObject.gotoAndStop (1) om myComboBox.selectedLabel == "Triangle") myObject.gotoAndStop (2) om (myComboBox.selectedLabel == "Circle") myObject.gotoAndStop (3)

Du kan nu gå vidare och kompilera programmet. Du ska kunna byta till ett annat objekt genom att välja det från rullgardinsmenyn.


Steg 6: Lägga till animering

Låt oss sedan lägga till lite animering till vårt program. Gå in i myObject MovieClip på den första ramen. Välj all den röda rektangeln och tryck på F8 för att göra den till en MovieClip. Se till att registreringspunkten ligger längst upp till vänster. Gör detta med varje form inuti myObject Filmklipp

Nästa måste vi ge varje MovieClip en animering. Gå in i rektangeln form MovieClip och högerklicka> Skapa Shape Tween på den röda formen fyllning.

Välj sedan 60: e rammen av MovieClip på tidslinjen och tryck på F6 för att skapa en ny keyframe. Gör det med 30: e ramen också. Nu kan du bara gå till 30: e ramen och ändra färgen på formfyllningen. Jag har valt att byta färg till en guldorange. Nu om du spelar animeringen, bör färgen ändras från Röd> Orange> Röd.

Gå vidare och gör detta för varje form i myObject Filmklipp. Nu kan du gå vidare och kompilera ansökan. varje vald form kommer att ändra färger.

Den aktuella applikationen ska fungera så här:


Steg 7: Doodle Canvas

Nu, låt oss tillåta användaren att dra en liten anpassad klotter på MovieClip. Det här liknar min sista handledning där vi fick användaren att rita en anpassad design på spelaren. Vi tar dock ett steg längre i denna handledning genom att tillåta användaren att SPARA sitt meddelande. Men låt oss spara det för senare!

Låt oss börja med att skapa en förekomst av Shape-klassen. Lägg till den här koden ovanför din konstruktör:

 privat var myCanvas: Shape = new Shape ()

Nästa kommer vi att lägga till variabeln myCanvas till scenen ... Lägg till den här koden i botten av vår konstruktör.

 addChild (myCanvas))

Steg 8: Doodles

Vi gör det väldigt snabbt. Om du vill ha mer förklaring om hur du använder Form-klassen för ritning, kolla min andra handledning.

Börja med att skapa en mouseIsDown-variabel ...

 // Kontrollerar om musen är nere privat var mouseIsDown: Boolean = false

Fortsätt nu och lägg till följande evenemangslyttare:

 stage.addEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.addEventListener (MouseEvent.MOUSE_DOWN, mouseDown) stage.addEventListener (MouseEvent.MOUSE_UP, mouseUp)

Och här är de 3 funktioner som är kopplade till EventListeners:

 privat funktion mouseUp (e: MouseEvent): void mouseIsDown = false privat funktion mouseDown (e: MouseEvent): void mouseIsDown = true // Flyttar muspekaren till musen myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY) ;  privat funktion drawDoodle (e: MouseEvent): void // Om musen är klickad om (mouseIsDown) // Gör ritningsinställningar rätt myCanvas.graphics.lineStyle (5, 0, 1) // Ritar doodle line myCanvas. graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY); 

Nu kan du testa programmet och det ska rita bra. Vi har dock fortfarande inte begränsat ritningsytan på vår duk, så visar teckningar utanför myObject-gränserna fortfarande. I nästa steg kommer vi att lösa allt detta!


Steg 9: Maskering

I min tidigare handledning var maskeringsprocessen mycket lätt eftersom varje maskerat objekt var detsamma under hela applikationen. Den här gången måste vi ha en mask som anpassar sig till varje MovieClip.

Låt oss fortsätta och högerklicka> Kopiera vårt myObject på scenen. Nu behöver vi högerklicka> Klistra in Placera objektet så det är exakt var vårt myObject var. Byt nu förekomstnamnet till "myObjectAsMask." Byt till huvudklassen och lägg till följande rader till konstruktören:

 // Detta borde vara självklarande! myCanvas.mask = myObjectAsMask myObjectAsMask.gotoAndStop (1)

Hittills ska masken bara fungera för det första objektet. Vi måste justera funktionen changeObjectFrame för att ändra vår mask för att uppfylla myObjects nya form. Lägg till den markerade koden i funktionen changeObjectFrame:

 privat funktion changeObjectFrame (e: Event): void if (myComboBox.selectedLabel == "Rektangel") myObject.gotoAndStop (1) om (myComboBox.selectedLabel == "Triangle") myObject.gotoAndStop (2) om (myComboBox.selectedLabel == "Circle") myObject.gotoAndStop (3) // Rensar doodle myCanvas.graphics.clear () // Synkroniserar myObject och myObjectAsMask-ramarna myObjectAsMask.gotoAndStop (myObject.currentFrame)

Steg 10: Spara knappen

Nästa upp: Vi lägger till en spara-knapp i vår ansökan. Senare kommer detta att spara alla våra myObjects data till ett SharedObject. Skapa en ny knapp och designa den men du vill. Jag har tagit med min egen knapp men visar dig hur man ritar en är inte viktig.

Dra en instans av knappen till scenen och ge den förekomstnamnet "saveStuff". Lägg sedan till följande händelse lyssnare för konstruktören:

 saveStuff.addEventListener (MouseEvent.CLICK, saveObjectData)

Lägg sedan till den här tomma funktionen som vi ska använda för att lägga till vår kod som sparar objektet.

 privat funktion saveObjectData (e: MouseEvent): void 

Steg 11: Skapa och komma åt ett nytt SharedObject

För att börja använda klassen SharedObject måste vi skapa en ny instans av SharedObject-klassen. Om du aldrig någonsin använt SharedObject-klassen tidigare skulle det vara en bra tid att kolla in den här handledningen om att arbeta med SharedObjects för att få en grundläggande uppfattning om hur de fungerar. Använd den här koden för att skapa ett SharedObject:

 privat var mySaveData: SharedObject = SharedObject.getLocal ("saveData")

Gå in i saveObjectData-funktionen och lägg till följande kod för att starta vår spara operation:

 // Skapar en ny matris inuti programmet var myDataArrayInProgram: Array = new Array () // Lägger till några slumpmässiga data i vår Array myDataArrayInProgram.push ("WhateverDataYouWant") // Skapar en variabel inuti SharedObject // och ställer in värdet till värdet av vår lokala // array mySaveData.data.myDataArray = myDataArrayInProgram // "Spolar" de data som ska sparas i //-datorn (även om namnet antyder annat, // det här lagrar faktiskt data!) mySaveData.flush ()

Om du vill kontrollera om den här koden är effektiv, lägg till det här kodkoden i botten av din funktion:

 trace (mySaveData.data.myDataArray)

Steg 12: Spara våra viktigaste MovieClip-data

Hittills är allt bra. Vi har lyckats skapa ett SharedObject och har lyckats lagra några byte data i den. Nästa steg är att börja förbereda vårt program för att rekonstruera vår MovieClip. I det här steget lägger vi alla nödvändiga data till vårt SharedObject för vår applikation för att rekonstruera MovieClip från början.

För att göra detta måste vi trycka alla våra data i myDataArrayInProgram Array så att den kommer att fästas på vårt SharedObject. Jag har ändrat funktionen saveObjectData för att göra allt detta. Du kan se den nedan:

 privat funktion saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = new Array () // Lägger till objektets X-plats myDataArrayInProgram.push (myObject.x) // Lägger till objektets Y-plats myDataArrayInProgram.push (myObject.y) // lägger till objektets currentFrame // (det aktuella objektet valt) myDataArrayInProgram.push (myObject.currentFrame) // Lägger till den aktuella ramen för // nuvarande objektets animering myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) mySaveData. data.myDataArray = myDataArrayInProgram mySaveData.flush () spår (mySaveData.data.myDataArray)

VIKTIG: getChildAt () får tillgång till objektets barn baserat på deras index. När det bara finns ett objekt i en MovieClip kan du vara säker på det getChildAt (0) kommer att ta dig till det!

MER VIKTIGT: Oroa dig inte om du får följande fel:

1119: Tillgång till eventuellt odefinierad egenskap currentFrame genom en referens med statisk typ flash.display: DisplayObject.

Om så är fallet har du förmodligen ett strikt läge aktiverat i dina flashinställningar. Problemet är att getChildAt () returnerar en DisplayObject, och för att blinka, det kan vara en Bitmap, Sprite, MovieClip, etc. Problemet med DisplayObject.currentFrame är det bara att MovieClip Class har egenskapen currentFrame, eftersom ingen annan klass har någon animering.

För att lösa detta, gå till: Arkiv> Publicera inställningar> Actionscript-inställningar och avmarkera "Fel: Strikt läge"

Redaktör: Alternativt kan du kasta objektet som returneras av getChildAt () som en MovieClip, som så:
 myDataArrayInProgram.push ((myObject.getChildAt (0) som MovieClip) .currentFrame)

Detta berättar Flash, "behandla det här objektet som en Filmklipp".


Steg 13: Skapa en lastknapp

Vi är inte på scenen än där vi kan använda vår spara data, men det är fortfarande bra att skapa gränssnittet för att ladda in SharedObject före tid. Precis som knappen Spara kan du utforma den här knappen för att vara det du vill ha. Jag kommer inte att gå igenom dig genom att skriva den.

Skapa en ny knapp och dra en instans till scenen. Ange sedan förekomstnamnet till "loadStuff".

Och nu lägger du bara till följande Event Listener:

 loadStuff.addEventListener (MouseEvent.CLICK, loadObjectData)

Och skapa funktionen loadObjectData som så:

 privat funktion loadObjectData (e: MouseEvent): void 

Steg 14: Rensa allt-knappen

Låt oss nu lägga till en ny knapp till vårt användargränssnitt. Den här knappen tar bort allt i vårt SharedObject och slänger även den aktuella klotteren på myCanvas.

Precis som de andra knapparna väljer jag min egen grafik; du kan välja din egen eller använda min.

Den här gången kan du ställa in instansnamnet på knappen till "clearStuff".

Lägg nu till den här händelselyttaren:

 clearStuff.addEventListener (MouseEvent.CLICK, clearObjectData)

Och skapa funktionen clearObjectData som så:

 privat funktion clearObjectData (e: MouseEvent): void // Clear SharedObject mySaveData.clear () // Rensar myCanvas-grafiken myCanvas.graphics.clear ()

Steg 15: BitmapData Snapshots

Nu börjar du fråga: "Varför kan jag inte rädda användarens doodle som någon annan egendom?" Tyvärr tillåter Flash inte direkt att spara MovieClips, Bitmaps eller till och med former inuti ett SharedObject, men du kan göra detta genom att spara pixeln med pixelvärdet av bilden.

Du måste fråga: "Men kungligheten är inte en bitmapp, det är en användardefinierad vektorbild i form ?!" Det stämmer, men vi kan konvertera det till Bitmap-baserade data genom att ta en ögonblicksbild av den med BitmapData-klassen!

Gå vidare och skapa följande variabel ovanför konstruktören i vår huvudsakliga applikation:

 privat var bitmapDataSnapshot: BitmapData

Denna variabel kommer att vara "kameran" som tar en ögonblicksbild av doodle.

Lägg nu till följande markerade linjer till funktionen saveObjectData på den plats som visas nedan:

 privat funktion saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = new Array () myDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) / / Skapar en ny instans av BitmapData-klassen, // gör det till en storlek, gör det möjligt för öppenhet, // och ställer in fyllningen till en transparent vit bitmapDataSnapshot = ny BitmapData (640, 480, true, 0) // Berättar kamera för att ta en stillbild // av myCanvas, hoppar över de följande 3 parametrarna, // och berättar att ögonblicksområdet bara omfattar // de saker som omfattas av myObject MovieClip bitmapDataSnapshot.draw (myCanvas, null, null, null, ny rektangel 250, 30, 150, 100)) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () spår (mySaveData.data.myDataArray)

Steg 16: Spara bitmapData i ett SharedObject

Låt oss paketera upp sparandet av vårt program. Nu när vi har skapat en BitmapData-förekomst med alla våra MyCanvas-data måste vi lagra den i en ByteArray för att skickas till vårt SharedObject. För att göra detta kan vi använda en mycket praktisk funktion inuti BitmapData-klassen. Dess namn är getPixels ().

getPixels () returnerar en ByteArray av alla pixeldata i en BitmapData. Till skillnad från BitmapData-klassen, ByteArrays kan lagras i SharedObjects så att de är det rätta verktyget för att spara vår Doodle.

Allt du behöver göra är att lägga till den här koden i din saveObjectData-funktion direkt efter att du har slutfört ditt BitmapData-arbete:

 // Pushes värdet av den returnerade // ByteArray av getPixels () -funktionen // i myDataArrayInProgram // getPixels () kräver en rektangel som // visar vilken del av objektets pixlar // vi egentligen vill ha! // ANMÄRKNING: Den nuvarande rektangeln är bara // en approximation av där doodle // ska visa! mySaveData.data.myDataArray.push (bitmapDataSnapshot.getPixels (ny rektangel (250, 30, 150, 100)))

Fortsätt till sista steget. När data är sparade behöver vi få användaren att uppdatera sidan för att bevisa att deras klotter har sparats på hårddisken och inte bara lagras i tillfälligt minne. Rita en svart låda runt scenen och lägg till lite text på det som ber spelaren att uppdatera. Välj sedan hela objektet och tryck på F8. Se till att du markerar rutan "Exportera till handling" och sätt "Class" till "refreshScreen". Du kan nu ta bort objektet på scenen ...

Nedan är den refreshScreen som jag har ritat:

Lägg nu till den här koden längst ner i din saveObjectData-funktion:

 addChild (ny refreshScreen ())

Din färdiga saveObjectData-funktion ska se ut så här:

 privat funktion saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = new Array () myDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) bitmapDataSnapshot = new BitmapData (640, 480, true, 0) bitmapDataSnapshot.draw (myCanvas, null, null, null, ny rektangel (250, 30, 150, 100)) myDataArrayInProgram.push (bitmapDataSnapshot.getPixels (ny rektangel (250, 30 , 150, 100))) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () spår (mySaveData.data.myDataArray) addChild (ny refreshScreen ())

Steg 17: Rekonstruera Vår Doodle

Det är dags att rekonstruera hela vår klotter från ByteArray som vi sparade tidigare!

Du måste tänka: "Vad gör jag med en ByteArray, det är bara en massa förvrängd mumbo-jumbo!" Och du har rätt, det är det! Tack och lov har Adobe också gett oss en bra funktion som heter setPixels () som du ger samma rektangel och ByteArray, för att återskapa samma BitmapData du hade!

Innan vi rekonstruerar hela vår MovieClip, bör vi fortsätta och köra ett test för att se om vi kan rekonstruera BitmapData själv. Ändra din loadObjectData funktion så det ser ut så här:

 privat funktion loadObjectData (e: MouseEvent): void // Skapar en BitmapData och gör // den storleken på scenen, och // applys alla gamla inställningarna var loadBitmapData: BitmapData = ny BitmapData (640, 480, true, 1) // Ställer in pixlarna i loadBitmap // med vår gamla rektangel och // genom att öppna vår SaveData ByteArray // (4: e objektet i myDataArray (myDataArray [3])) loadBitmapData.setPixels (ny rektangel (250, 30, 150 , 100), mySaveData.data.myDataArray [3]) // Skapar en ny bitmapp och berättar att den / // laddar upp sin bild från loadBitmapData var display: Bitmap = ny Bitmap (loadBitmapData) // Flyttar objektmasken // spelhuvud till den högra ramen myObjectAsMask.gotoAndStop (mySaveData.data.myDataArray [2]) // Maskerar bilden med masken display.mask = myObjectAsMask // Lägger bitmappen till scenen addChild (display)

Steg 18: Fullkonstruktion av myObject

Nu är det dags att sätta allt detta tillsammans! Först, högerklicka på myObject (i biblioteket)> Egenskaper. Markera rutan "Exportera till handling" och sätt "Klass" till "myObjectType". Jämför dina egenskaper med dem i bilden:

Om det är samma sak är vi redo att gå! Lägg till detta ovanför vår konstruktör:

 privat var myNewObject: myObjectType;

Och lägg till Allt av detta till toppen av loadObjectData ().

 // Skapar en ny instans av myObjectType (myObject) myNewObject = new myObjectType () // Ställer in X till den gamla positionen myNewObject.x = mySaveData.data.myDataArray [0] // Ställer in Y till den gamla posten myNewObject.y = mySaveData.data.myDataArray [1] // Väljer det gamla objektet myNewObject.gotoAndStop (mySaveData.data.myDataArray [2]) // Flyttar uppspelningshuvudet till den högra animeringsramen myNewObject.getChildAt (0) .gotoAndStop (mySaveData.data .myDataArray [3]) // Lägger till objektet till scenen addChild (myNewObject) // Ta bort comboBox-händelseloggaren myComboBox.removeEventListener (Event.CHANGE, changeObjectFrame) // Tar bort "doStuff" -händelselysare för knappar saveStuff.removeEventListener (MouseEvent .CLICK, saveObjectData) loadStuff.removeEventListener (MouseEvent.CLICK, loadObjectData) clearStuff.removeEventListener (MouseEvent.CLICK, clearObjectData) // Tar bort händelserelektörer av tecknare stage.removeEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.removeEventListener (MouseEvent.MOUSE_DOWN, mouseDown ) stag e.removeEventListener (MouseEvent.MOUSE_UP, mouseUp) // Ta bort onödigt användargränssnitt removeChild (myObject) removeChild (saveStuff) removeChild (loadStuff) removeChild (clearStuff) removeChild (myComboBox) removeChild (myCanvas)

Testa appen, det ska fungera perfekt.

grattis! Du har officiellt rekonstruerat en MovieClip med SharedObject-klassen!


Steg 19: Lägga till en Play Animation Button

Om programmet ovan fungerar, ska det visa en pausad bild av var du sparade myObject. För att få animationen att spela igen, låt oss skapa en "Play" -knapp. Här är den jag har valt:

Dra det precis nedanför myObject på scenen och sätta sitt förekomstnamn till "playAnimation".

Lägg nu till detta till botten av vår konstruktör:

 // Hides-knappen playAnimation.visible = false // Lägger till knappar Händelselysare playAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation)

Lägg sedan det här längst ner på loadObjectData ().

 // Visar knapp playAnimation.visible = true

Slutligen lägg till den här funktionen i ditt program:

 privat funktion playObjectAnimation (e: MouseEvent): void myNewObject.play ()

Steg 20: Slutkälla

Här är vår Final Application Source Code. Om det finns någon skillnad mellan din kod och detta, gå tillbaka och se var du tog en annan väg.

 paket importera flash.display.Bitmap; importera flash.display.BitmapData; importera flash.display.Graphics; importera flash.display.Shape; importera flash.display.Sprite; importera fl.controls.ComboBox importera flash.events.Event; importera flash.events.MouseEvent; importera flash.geom.Matrix; importera flash.geom.Rectangle; importera flash.net.SharedObject; public class Main sträcker Sprite private var myComboBox: ComboBox = ny ComboBox () privat var myCanvas: Shape = new Shape () privat var mouseIsDown: Boolean = falsk privat var mySaveData: SharedObject = SharedObject.getLocal ("saveData") privat var bitmapDataSnapshot : BitmapData privat var myNewObject: myObjectType public function Huvud (): void myObject.gotoAndStop (1) myComboBox.addItem (label: "Rectangle") myComboBox.addItem (etikett: "Triangle") myComboBox.addItem  label: "Circle") addChild (myComboBox) myComboBox.move (280, 150) myComboBox.addEventListener (Event.CHANGE, changeObjectFrame) addChild (myCanvas) stage.addEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.addEventListener (MouseEvent.MOUSE_DOWN mouseEown) eEvent.CLICK, clearObjectData) playAnimation.visible = false playAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation) privat funktion clearObjectData (e: MouseEvent): void mySaveData.clear () myCanvas.graphics.clear () privatfunktionsbelastningObjectData ( e: MouseEvent): void myNewObject = ny myObjectType () myNewObject.x = mySaveData.data.myDataArray [0] myNewObject.y = mySaveData.data.myDataArray [1] myNewObject.gotoAndStop (mySaveData.data.myDataArray [2]) myNewObject.getChildAt (0) .gotoAndStop (mySaveData.data.myDataArray [3]) addChild (myNewObject) myComboBox.removeEventListener (Event.CHANGE, changeObjectFrame) saveStuff.removeEventListener (MouseEvent.CLICK, saveObjectData) loadStuff.removeEventListener (MouseEvent.CLICK, loadObjectData) clearStuff.removeEventListener (MouseEvent.CLICK, clearObjectData) stage.removeEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.removeEventListener (MouseEvent.MOUSE_DOWN, mouseDown) stage.removeEventListener (MouseEvent.MOUSE_UP, mouseUp) remo veChild (myObject) removeChild (saveStuff) removeChild (loadStuff) removeChild (clearStuff) removeChild (myComboBox) removeChild (myCanvas) var loadBitmapData: BitmapData = ny BitmapData (640, 480, true, 1) loadBitmapData.setPixels (ny rektangel (250, 30 , MySaveData.data.myDataArray [4]) var display: Bitmap = true privat funktion playObjectAnimation (e: MouseEvent): void myNewObject.getChildAt (0) .play () playAnimation.visible = false privat funktion saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = new Array myDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.y) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) bitmapDataSnapshot = ny BitmapData (640, 480, true, 0) bitmapDataSnapshot.draw (myCanvas, null, null, null, ny Recta ngle (250, 30, 150, 100)) myDataArrayInProgram.push (bitmapDataSnapshot.getPixels (ny rektangel (250, 30, 150, 100)) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () spår (mySaveData.data. myDataArray) privat funktion mouseUp (e: MouseEvent): void mouseIsDown = false privat funktion mouseDown (e: MouseEvent): void mouseIsDown = true myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY);  privat funktion drawDoodle (e: MouseEvent): void if (mouseIsDown) myCanvas.graphics.lineStyle (5, 0, 1) myCanvas.graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY);  Private Function ChangeObjectFrame (e: Event): void if (myComboBox.selectedLabel == "Rektangel") myObject.gotoAndStop (1) om (myComboBox.selectedLabel == "Triangle") myObject.gotoAndStop (2)  om (myComboBox.selectedLabel == "Circle") myObject.gotoAndStop (3) myCanvas.graphics.clear () myObjectAsMask.gotoAndStop (myObject.currentFrame)

Slutsats

Som du kan se, med lite tweaking, är det absolut möjligt att spara alla MovieClip-data i SharedObjects för laddning senare. Det innebär att om du skriver ett spel kan du enkelt skapa rädda stater istället för att ha små kontrollpunkter ...

Lycka till att använda den här metoden för att spara data på dina spel och applikationer, för att göra dina program bättre än någonsin!

Tack för att du läser!