MovieClip Rekonstruksjon med Shared Class

MovieClip Rekonstruksjon med Shared Class
Del
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.

I denne opplæringen, vil vi lære å implementere Shared klassen. Vi vil lagre alle viktige data på en MovieClip lokalt, legg det neste gang programmet åpnet!

Vi fant denne awesome forfatteren takket FlashGameLicense.com, stedet å kjøpe og selge Flash-spill.


Takk til manicho for harddiskikonet.



Endelig resultat Forhåndsvisning

La oss ta en titt på endelige resultatet vi skal jobbe mot:

Doodle et bilde i boksen med musen, og traff på Lagre-knappen. Oppdatere denne siden i nettleseren, og klikk Last inn. Du vil se din doodle igjen ved å ha blitt lastet inn fra harddisken; bakgrunnen animasjon vil selv være på den samme rammen som den var før



Trinn 1: Klar Vår Document Class

La oss begynne med å lage en ny FLA. Lagre den og åpne opp eiendommer panel i Flash. Jeg bruker Flash CS5, men denne opplæringen skal fungere med alle Flash CS versjon. I egenskapsvinduet, trykk på Rediger, og sørge for at innstillingene er identiske til bildet under:



Trinn 2: Dokument Class Setup

Nå som vi har setup vår FLA, la oss begynne vår Document Class. For å begynne, åpne opp din favoritt Actionscript-kode editor og lagre en .as fil som heter "Main.as" i samme katalog som FLA. Neste gå inn på "Publiser" panel av Flash. Sett "Class" tekstfeltet til "Main". Nå åpne Main.as og kopier og lim inn følgende kode for å lage vår hoveddokumentet klasse.
pakke {import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import fl.controls.ComboBox import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.SharedObject; public class Hoved strekker Sprite {offentlig funksjon main (): void {}}}



Trinn 3: Vårt hovedformål

Nå skal vi lage vår hoved MovieClip. Den vil inneholde 3 rammer. Hver og en med en farget form. Tegn en rød firkant, slå den inn i en MovieClip med F8 og angi navnet på MovieClip til «myObject". Kontroller at registreringspunktet er øverst i venstre hjørne. Deretter oppretter to nye tomme rammer inne i MovieClip. Fyll en opp med en grønn trekant og den andre med en blå sirkel

Det endelige resultatet skal se litt ut som dette:.



Trinn 4: Bruke en ComboBox
< p> Nå skal vi bruke en ComboBox, som er utgangspunktet en rullegardinliste. Pass på at forekomsten av myObject på scenen er også merket myObject. Deretter åpner: Vindu > Komponenter og dra "ComboBox" element på biblioteket. Hvis du ikke bruker Flash IDE, må du Right Click > Eksport til SWC den ComboBox i biblioteket

Nå kan vi skape "myComboBox" variable, plassert over konstruktøren funksjon
privat Var myComboBox:.. ComboBox = new ComboBox ()

Neste tilsett følgende kode til din main () konstruktør:
//Stopper myObject MovieClip på første framemyObject.gotoAndStop (1) //legger til følgende objekter til ComboBoxand gir dem hver unike labelsmyComboBox.addItem({label:"Rectangle"})myComboBox.addItem({label:"Circle"})myComboBox.addItem({label:"Triangle"})//Adds den ComboBoxaddChild (myComboBox) //Flytter den til riktig coordinatesmyComboBox.move (280150)

Her er et øyeblikksbilde av hva søknaden skal se ut når det kjøres:



Trinn 5: Endre myObject Frames

Vi ønsker vår MovieClip å endre rammer når vi velger et annet element

La oss begynne med å legge en EventListener til vår konstruktør - den Event.CHANGE arrangementet lytteren - som sjekker for å se når den valgte objekt i kombinasjonsboksen endringer. Dette er nøyaktig når brukeren velger en ny ComboBox element.
MyComboBox.addEventListener (Event.CHANGE, changeObjectFrame)

Neste vi skal skape den changeObjectFrame () -funksjonen. Denne funksjonen sjekker for å se hva den gjeldende etiketten på ComboBox er, som er navnet på objektet brukeren har valgt. Det vil da gå til riktig ramme myObject å vise den valgte objekttypen
privat funksjon changeObjectFrame (e: Hendelses):. Void {//myComboBox.selectedLabel er navnet på det aktuelle objektet valgt at vi definerte tidligere .. . if (myComboBox.selectedLabel == "rektangel") {myObject.gotoAndStop (1)} if (myComboBox.selectedLabel == "Trekant") {myObject.gotoAndStop (2)} if (myComboBox.selectedLabel == "Circle") {myObject.gotoAndStop (3)}}

Du kan nå gå videre og kompilere programmet. Du bør være i stand til å bytte til et annet objekt ved å velge den fra rullegardinmenyen



Trinn 6:. Legge Animation

Neste, la oss legge til noen animasjon til vårt program. Gå inn i myObject MovieClip på det første bildet. Velg alt det røde rektangelet og presse F8 for å slå den inn i en MovieClip. Kontroller at registreringspunktet er øverst i venstre hjørne. Gjør dette med hver figur inne i myObject MovieClip

Neste vi blir nødt til å gi hver MovieClip en animasjon. Gå inn i rektangel form MovieClip og Høyre Click > Lag Shape Tween på den røde formen fylling.

Velg deretter den 60. rammen av MovieClip på tidslinjen og trykk F6 for å lage en ny keyframe. Gjør dette med den 30. rammen også. Nå kan du bare gå til den 30. rammen og endre fargen på formen fyll. Jeg har valgt å endre fargen til en gylden oransje. Nå hvis du spiller av animasjonen, bør fargen endres fra Red > Orange > Red.

Gå videre og gjøre dette for hver form i myObject MovieClip. Nå kan du gå videre og kompilere programmet; hvert valgte formen vil endre farger

Den aktuelle søknaden bør opptre slik ut:.



Trinn 7: Doodle Canvas

Nå, la oss tillate brukeren å tegne en lite tilpasset doodle på MovieClip. Dette ligner på min siste tutorial der vi tillot brukeren å tegne et tilpasset design på spilleren. Imidlertid vil vi ta det ett skritt videre i denne opplæringen ved å tillate brukeren å lagre hans budskap. Men la oss lagre Hotell som for senere!

La oss komme i gang med å sette opp en forekomst av Shape klassen. Legg denne koden ovenfor konstruktør:
private Var myCanvas:. Shape = new Shape ()

Neste vi kommer til å legge den myCanvas variabel til scenen ... legge denne koden til bunnen av vår konstruktør
addChild (myCanvas))



Trinn 8: Doodles

Vi vil gjøre dette veldig raskt. Hvis du vil ha mer forklaring på hvordan du bruker Shape klassen for tegning, kan du sjekke min andre opplæringen.

Start med å lage en mouseIsDown variabel ...
//Sjekker for å se om musen er downprivate Var mouseIsDown: Boolean = false

Nå gå videre og legge til følgende hendelsen lyttere:
stage.addEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.addEventListener (MouseEvent.MOUSE_DOWN, mousedown) stage.addEventListener (MouseEvent.MOUSE_UP, mouseup )

Og her er de 3 funksjoner som er knyttet til de EventListeners:
privat funksjon mouseup (e: MouseEvent): void {mouseIsDown = false} privat funksjon mousedown (e: MouseEvent): void {mouseIsDown = true //Flytter musepekeren til muse myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY); } Private funksjon drawDoodle (e: MouseEvent): void {//Hvis musen klikket if (mouseIsDown) {//Gjør tegning innstillingene riktig myCanvas.graphics.lineStyle (5, 0, 1) //Tegner doodle linje myCanvas. graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY); }}

Nå kan du teste ut programmet, og det bør være å tegne fine. Men vi har fortsatt ikke begrenset tegningen løpet av vår lerret, så tegninger utenfor de myObject grenser fortsatt vise. I neste trinn, vil vi løse alt dette



Trinn 9: Maske

I min forrige tutorial, prosessen med maskerings var veldig enkelt fordi hver maskerte objekt forblitt den samme gjennom hele programmet. Denne gangen må vi ha en maske som tilpasser seg hver MovieClip

La oss gå videre og Høyre Click >.; Kopiere vår myObject på scenen. Nå må vi Right Click > Lim inn Plasser objektet slik det er akkurat der vår myObject var. Nå endre forekomsten navnet til "myObjectAsMask." Bytt til den største klassen og legge til følgende linjer i konstruktøren:
//Dette bør alle være selvforklarende myCanvas.mask = myObjectAsMaskmyObjectAsMask.gotoAndStop (1)

Så langt masken skal bare jobbe for! første objektet. Vi trenger å justere changeObjectFrame funksjonen for å endre vår maske for å møte den nye formen myObject. Legg den merkede koden til changeObjectFrame funksjon:
privat funksjon changeObjectFrame (e: Hendelses): void {if (myComboBox.selectedLabel == "rektangel") {myObject.gotoAndStop (1)} if (myComboBox.selectedLabel == " Triangle ") {myObject.gotoAndStop (2)} if (myComboBox.selectedLabel ==" Circle ") {myObject.gotoAndStop (3)} //Fjerner doodle myCanvas.graphics.clear () //Synkroniserer myObject og myObjectAsMask rammer myObjectAsMask. gotoAndStop (myObject.currentFrame)}



Steg 10: Lagre-knappen

Neste opp: vil vi legge til en lagringsknappen til søknaden vår. Senere vil dette spare alle våre myObject data inn i en Shared. Opprett en ny knapp og designe den slik du vil. Jeg har tatt med min egen knapp, men som viser deg hvordan du kan tegne en ikke er viktig.

Dra en forekomst av knappen på scenen og gi den forekomsten navnet "saveStuff". Deretter legger følgende hendelse lytteren til konstruktøren:
saveStuff.addEventListener (MouseEvent.CLICK, saveObjectData)

Deretter legger denne tomme funksjon som vi vil bruke til å legge vår kode som sparer objektet
privat funksjon. saveObjectData (e: MouseEvent): void {}



Trinn 11: Lage og tilgang til en ny Shared

For å begynne å bruke Shared klasse, må vi lage en ny forekomst av Shared klasse . Hvis du ikke har noen gang brukt Shared klassen før, da dette ville være en god tid til å sjekke ut denne opplæringen på Arbeide med SharedObjects å få en grunnleggende idé om hvordan de fungerer. Bruk denne koden for å lage en Shared:
private Var mySaveData: Shared = SharedObject.getLocal ("SAVEDATA")

Gå inn i saveObjectData funksjon og legge til følgende kode for å begynne vår spare drift:
//Oppretter en ny rekke inne i programvar myDataArrayInProgram: Array = new Array () //Legger noen tilfeldige data til vår ArraymyDataArrayInProgram.push ("WhateverDataYouWant") //Oppretter en variabel inne i Shared //og setter det er verdi til verdien av vår lokale //arraymySaveData.data.myDataArray = myDataArrayInProgram //"Flush" dataene unna å bli lagret i //datamaskinen (selv om navnet tilsier noe annet, //dette faktisk lagrer data!) mySaveData.flush ()

Hvis du ønsker å sjekke for å se om denne koden er effektiv, bare legge denne kodebit til bunnen av din funksjon:
spore (mySaveData.data.myDataArray)



Steg 12: Lagre vår hoved MovieClip data

Så langt er alt bra. Vi har klart å skape en Shared og har blitt lagret noen byte med data i den. Det neste trinnet er å begynne å forberede vårt program for å rekonstruere vår MovieClip. I dette trinnet, vil vi legge til alle de nødvendige data til vår Shared for vår søknad til å rekonstruere MovieClip fra scratch.

For å gjøre dette, trenger vi å presse alle våre data inn i myDataArrayInProgram Array så det vil bli knyttet til vårt Shared. Jeg har endret saveObjectData funksjonen til å gjøre alt dette. Du kan se den nedenfor:
privat funksjon saveObjectData (e: MouseEvent): void {var myDataArrayInProgram: Array = new Array () //Legger objektets X plassering myDataArrayInProgram.push (myObject.x) //Legger objektets Y plassering myDataArrayInProgram.push (myObject.y) //Legger objektets currentFrame //(Den nåværende objekt valgt) myDataArrayInProgram.push (myObject.currentFrame) //Legger til gjeldende rammen av //nåværende objektets animasjon myDataArrayInProgram.push (myObject. getChildAt (0) .currentFrame) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () trace (mySaveData.data.myDataArray)}

VIKTIG: getChildAt () gir tilgang til barn av objektet basert på deres indeks. Når det er bare ett objekt i en MovieClip, kan du være sikker på at getChildAt (0) vil få deg til det!

Enda viktigere: Ikke bekymre deg hvis du får følgende feilmelding:

1 119: Tilgang fra muligens udefinert eiendom currentFrame gjennom en referanse med statiske typen flash.display. Displayobject
< p> I så fall har du sannsynligvis Strict-modus aktivert i blitsinnstillingene. Problemet er at getChildAt () returnerer en Displayobject, og til å blinke, som kan være en Bitmap, Sprite, MovieClip, etc. Problemet med DisplayObject.currentFrame er at bare den MovieClip klasse har currentFrame eiendom, fordi ingen andre klasse har noen . animasjon

For å løse dette, kan du gå til: Fil > Publish Innstillinger > Action Innstillinger og fjern haken "Feil: Streng Mode"
Redaktør: Alternativt kunne du kastet
objektet returnert av getChildAt () som en MovieClip, som så: myDataArrayInProgram.push ((myObject.getChildAt (0 ) som MovieClip) .currentFrame)

Dette forteller Flash, "behandle dette objektet som
en MovieClip
"



Trinn 13:. Opprette en Load Button

Vi er ikke på det stadiet ennå hvor vi kan bruke våre lagre data, men det er likevel godt å lage UI muligheten til å laste Shared forhånd. Akkurat som på lagre-knappen, kan du designe denne knappen for å bli slik du vil; Jeg kommer ikke til å gå gjennom å tegne den.

Opprett en ny knapp og dra en forekomst på scenen. Deretter satt forekomsten navn til "loadStuff"

Og nå bare legge til følgende hendelsen lytteren.
LoadStuff.addEventListener (MouseEvent.CLICK, loadObjectData)

Og skape loadObjectData funksjon slik:
privat funksjon loadObjectData (e: MouseEvent): void {}



Trinn 14: Clear Alt Button

Nå la oss legge til en ny knapp i vår UI. Denne knappen vil slette alt i vår Shared og også tørke ut dagens doodle på myCanvas

Akkurat som de andre knappene, vil jeg velge mitt eget grafisk.; du kan velge din egen eller bruk gruve

Denne gangen kan du angi navnet på forekomsten av knappen for å "clearStuff"

Nå kan du legge denne hendelsen lytteren.:.
clearStuff.addEventListener ( MouseEvent.CLICK, clearObjectData)

Og skape clearObjectData funksjon slik:
privat funksjon clearObjectData (e: MouseEvent): void {//Clear Shared mySaveData.clear () //Sletter myCanvas grafikk myCanvas.graphics.clear ()}



Trinn 15: BitmapData Snapshots

Nå er du i ferd med å spørre: "Hvorfor kan jeg ikke lagre brukerens doodle som enhver annen eiendom" Dessverre, ikke Flash ikke tillate deg å direkte lagre movieclips, bitmaps, eller Shapes innsiden av en Shared, men du kan gjøre dette ved å lagre piksel for piksel verdi av bildet

Du må spørre.: "Men doodle er ikke et bitmap, er det en bruker tegnet vektorbilde som finnes i form ?!" Det er riktig, men vi kan konvertere den til Bitmap baserte data ved å ta et øyeblikksbilde av den med BitmapData klassen

Gå videre og opprette følgende variable ovenfor konstruktøren av våre viktigste søknad!
Private Var bitmapDataSnapshot : BitmapData

Denne variabelen vil være "kamera" som tar et øyeblikksbilde av doodle

Nå kan du legge følgende uthevede linjer til saveObjectData funksjonen i stedet vist nedenfor:.
privat funksjon saveObjectData ( e: MouseEvent): void {var myDataArrayInProgram: Array = new Array () myDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) //Oppretter en ny forekomst av BitmapData klassen, gjør //det størrelsen på scenen, gjør at åpenhet, //og setter fyllet til en gjennomsiktig hvit bitmapDataSnapshot = nye BitmapData (640, 480, sant, 0) //Forteller kameraet til å ta et snapshot //av myCanvas, hopper de neste 3 parametre, //og forteller snapshot område å bare inkludere //ting dekket av myObject MovieClip bitmapDataSnapshot.draw (myCanvas, null, null, null, ny rektangel (250, 30, 150, 100)) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () trace (mySaveData.data.myDataArray)}



Trinn 16: Saving BitmapData i en Shared

La oss bryte opp besparende prosessen med vårt program. Nå som vi har opprettet en BitmapData forekomst med alle våre myCanvas data, må vi lagre den i en ByteArray skal sendes inn i vår Shared. For å gjøre dette, kan vi bruke et veldig nyttig funksjon innsiden av BitmapData Class. Det heter getPixels ().

getPixels () returnerer en ByteArray av alle pikseldata av en BitmapData. I motsetning til BitmapData Class, ByteArrays kan
lagres inne SharedObjects så de er det riktige verktøyet for lagring av våre Doodle.

Alt du trenger å gjøre er å legge til denne linjen med kode i ditt saveObjectData funksjon rett etter at du er ferdig med å gjøre din BitmapData arbeid:
//Skyver verdien av den returnerte //ByteArray av getPixels () -funksjonen //inn myDataArrayInProgram //getPixels () krever et rektangel som //viser hvilken del av objektets piksler //vi faktisk ønsker //OBS! Den nåværende rektangelet er kun //en tilnærming til hvor doodle //skal vise mySaveData.data.myDataArray.push (bitmapDataSnapshot.getPixels (ny rektangel (250, 30, 150, 100! )))

På til siste trinn. Når dataene er lagret, må vi ha brukeren oppdatere siden, for å bevise at deres doodle har blitt lagret til harddisken, og ikke bare er lagret i midlertidige minnet. Tegn en svart boks rundt på scenen og legg til litt tekst til den som ber spilleren å oppdatere. Deretter velger hele objektet og presse F8. Sørg for å sjekke "Export For Action" boksen og sette "Class" til "refreshScreen". Du kan nå slette objektet på scenen ...

Nedenfor er refreshScreen at jeg har trukket:

Nå kan du legge denne koden til bunnen av din saveObjectData funksjon:
addChild ( ny refreshScreen ())

Din ferdige saveObjectData funksjon skal se slik ut:
privat funksjon 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, sant, 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 () trace (mySaveData.data.myDataArray) addChild (nytt refreshScreen ())}



Trinn 17: Rekonstruer Vår Doodle

Det er på tide å rekonstruere hele Doodle fra ByteArray at vi har lagret tidligere

Du må tenke: " Hva pokker gjør jeg med en ByteArray, det bare en haug med rotete mumbo-jumbo! " Og du har rett, er det! Heldigvis har Adobe også gitt oss en flott funksjon kalt setPixels () som du gir den samme rektangulært ByteArray, å gjenskape den samme BitmapData du hadde!

Før vi rekonstruere hele MovieClip, vi bør gå videre og kjøre en test for å se om vi kan rekonstruere BitmapData selv. Endre loadObjectData funksjon slik at det ser slik ut:
privat funksjon loadObjectData (e: MouseEvent): void {//Oppretter en BitmapData og gjør //det størrelsen på scenen, og //applys alle de gamle innstillingene Var loadBitmapData: BitmapData = nye BitmapData (640, 480, sant, 1) //Setter pikslene i loadBitmap //bruker vår gamle rektangel, og //ved å åpne vår SAVEDATA ByteArray //(fjerde elementet i myDataArray (myDataArray [3]) ) loadBitmapData.setPixels (ny rektangel (250, 30, 150, 100), mySaveData.data.myDataArray [3]) //Oppretter en ny Bitmap og forteller det til //laste inn bilde fra loadBitmapData Var display: Bitmap = new Bitmap (loadBitmapData) //Flytter objektet masken //hodet til den rette rammen myObjectAsMask.gotoAndStop (mySaveData.data.myDataArray [2]) //Masker bildet med masken display.mask = myObjectAsMask //Legger Bitmap til scenen addChild (display)}



Trinn 18: Fullt Rekonstruksjon myObject

Nå er det på tide å sette dette alle sammen! Først høyreklikker du på myObject (i bibliotek) > Egenskaper. Sjekk nå "Export For Action" boksen og sette "Class" til "myObjectType". Sammenligne dine egenskaper til de i bildet:

Hvis det er det samme, så er vi klar til å gå! Legg dette over vår konstruktør:
private Var myNewObject: myObjectType;

Og legg til alt
av denne til toppen av loadObjectData ()
//Oppretter en ny forekomst av myObjectType (myObject. ) myNewObject = new myObjectType () //Setter X til den gamle positionmyNewObject.x = mySaveData.data.myDataArray [0] //Setter Y til de gamle postionmyNewObject.y = mySaveData.data.myDataArray [1] //Velger den gamle objectmyNewObject.gotoAndStop (mySaveData.data.myDataArray [2]) //Flytter spillehodet til høyre animasjon framemyNewObject.getChildAt (0) .gotoAndStop (mySaveData.data.myDataArray [3]) //Legger objektet til stageaddChild (myNewObject) //Fjerner Combobox hendelsen listenermyComboBox.removeEventListener (Event.CHANGE, changeObjectFrame) //Fjerner de "doStuff" hendelsen lyttere for buttonssaveStuff.removeEventListener (MouseEvent.CLICK, saveObjectData) loadStuff.removeEventListener (MouseEvent.CLICK, loadObjectData) clearStuff. removeEventListener (MouseEvent.CLICK, clearObjectData) //Fjerner tegning hendelsen listenersstage.removeEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.removeEventListener (MouseEvent.MOUSE_DOWN, mousedown) stage.removeEventListener (MouseEvent.MOUSE_UP, mouseup) //Fjerner unødvendige UIremoveChild(myObject)removeChild(saveStuff)removeChild(loadStuff)removeChild(clearStuff)removeChild(myComboBox)removeChild(myCanvas)

Test app ut, bør det fungere perfekt.

Gratulerer! Du har offisielt rekonstruert en MovieClip hjelp av Shared klassen



Trinn 19: Legge til en Play Animation Button

Hvis søknaden ovenfor fungerer, bør det gi en stanset bilde av hvor du Lagret myObject. For å få animasjonen til å spille igjen, la oss lage en "Play" -knappen. Her er en som jeg har valgt:

Dra den like under myObject på scenen og sette eksempel navn til "playAnimation"

Nå kan du legge denne til bunnen av vår konstruktør.:
//Skjuler buttonplayAnimation.visible = false //Legger knapper Hendelses ListenerplayAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation)

Deretter satte dette på bunnen av loadObjectData ().
//serier buttonplayAnimation.visible = sant

Til slutt, legge denne funksjonen til programmet:
privat funksjon playObjectAnimation (e: MouseEvent): void {myNewObject.play ()}



Trinn 20: Slutt Kilde

Her er vårt endelige søknaden Source Code. Hvis det er noen forskjell mellom kode og dette, gå tilbake og se hvor du tok en annen vei
pakke {import flash.display.Bitmap.; import flash.display.BitmapData; import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import fl.controls.ComboBox import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.SharedObject; public class Hoved strekker Sprite {private Var myComboBox: ComboBox = new ComboBox () private Var myCanvas: Shape = new Shape () private Var mouseIsDown: Boolean = false privat Var mySaveData: Shared = SharedObject.getLocal ("SAVEDATA") private Var bitmapDataSnapshot : BitmapData private Var myNewObject: myObjectType offentlig funksjon main (): void {myObject.gotoAndStop (1) myComboBox.addItem ({label: "rektangel"}) myComboBox.addItem ({label: "Trekant"}) myComboBox.addItem ({ etiketten: "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 , mousedown) stage.addEventListener (MouseEvent.MOUSE_UP, mouseup) myCanvas.mask = myObjectAsMask myObjectAsMask.gotoAndStop (1) saveStuff.addEventListener (MouseEvent.CLICK, saveObjectData) loadStuff.addEventListener (MouseEvent.CLICK, loadObjectData) clearStuff.addEventListener (MouseEvent. KLIKK, clearObjectData) playAnimation.visible = false playAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation)} privat funksjon clearObjectData (e: MouseEvent): void {mySaveData.clear () myCanvas.graphics.clear ()} privat funksjon loadObjectData (e: MouseEvent): void {myNewObject = new 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) removeChild (myObject) removeChild (saveStuff) removeChild ( loadStuff) removeChild (clearStuff) removeChild (myComboBox) removeChild (myCanvas) Var loadBitmapData: BitmapData = new BitmapData (640, 480, sanne, 1) loadBitmapData.setPixels (nytt rektangel (250, 30, 150, 100), mySaveData.data. myDataArray [4]) Var display: Bitmap = new Bitmap (loadBitmapData) myObjectAsMask.gotoAndStop (mySaveData.data.myDataArray [2]) display.mask = myObjectAsMask addChild (display) playAnimation.visible = true} privat funksjon playObjectAnimation (e: MouseEvent ): void {myNewObject.getChildAt (0) Beskytt din Nintendo DS () playAnimation.visible = false} privat funksjon 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 = nye BitmapData (640, 480, sanne, 0) bitmapDataSnapshot.draw (myCanvas, null, null, null, ny rektangel (250, 30, 150, 100)) myDataArrayInProgram.push (bitmapDataSnapshot.getPixels (nytt rektangel (250, 30, 150, 100))) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () trace (mySaveData .data.myDataArray)} privat funksjon mouseup (e: MouseEvent): void {mouseIsDown = false} privat funksjon mousedown (e: MouseEvent): void {mouseIsDown = true myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY); } Private funksjon drawDoodle (e: MouseEvent): void {if (mouseIsDown) {myCanvas.graphics.lineStyle (5, 0, 1) myCanvas.graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY); }} Privat funksjon changeObjectFrame (e: Hendelses): void {if (myComboBox.selectedLabel == "rektangel") {myObject.gotoAndStop (1)} if (myComboBox.selectedLabel == "Trekant") {myObject.gotoAndStop (2) } if (myComboBox.selectedLabel == "Circle") {myObject.gotoAndStop (3)} myCanvas.graphics.clear () myObjectAsMask.gotoAndStop (myObject.currentFrame)}}}



Konklusjon

Som du kan se, med litt tilpasning, er det absolutt mulig å lagre alle MovieClip data inn SharedObjects for lasting senere. Dette betyr at hvis du skriver et spill, kan du enkelt lage redde statene i stedet for å ha små sjekkpunkter ...

Lykke til på å bruke denne metoden for lagring av data på spill og programmer, for å gjøre programmene dine bedre enn noensinne!

Takk for lesing! Anmeldelser