În timpul acestui tutorial, vom învăța cum să implementăm clasa SharedObject. Vom stoca toate datele esențiale ale unui filmClip local, apoi reîncărcați-l data viitoare când aplicația va fi deschisă!
Am gasit acest autor minunat datorita FlashGameLicense.com, locul unde puteti cumpara si vinde jocuri Flash.
Datorită manicho pentru pictograma hard disk.
Să aruncăm o privire asupra rezultatului final pe care îl vom strădui:
Faceți o imagine în cutie cu mouse-ul și apăsați butonul Salvare. Actualizați această pagină în browser și faceți clic pe Încărcați. Veți vedea că doodle-ul dvs. reapare, fiind încărcat de pe hard disk; animația de fundal va fi chiar în același cadru ca înainte!
Să începem prin crearea unui .fla nou. Salvați-l și deschideți panoul cu proprietăți din Flash. Folosesc Flash CS5, dar acest tutorial ar trebui să funcționeze cu fiecare versiune Flash CS. În panoul cu proprietăți, apăsați pe Editați | × butonul și asigurați-vă că setările dvs. sunt identice cu imaginea de mai jos:
Acum, când ne-am configurat .fla, să începem clasa noastră de documente. Pentru a începe, deschideți editorul dvs. preferat de cod ActionScript și salvați un fișier .as numit "Main.as" în același director ca fișierul .fla. Apoi intrați în panoul "Publicați" din Flash. Setați câmpul de text "Clasă" în "Principal". Acum deschideți Main.as și copiați și inserați următorul cod pentru a crea clasa noastră de documente principale.
pachet 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; importul flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.SharedObject; clasa publică principală se extinde Sprite funcția publică principală (): void
Acum vom crea principalul film clip. Acesta va conține 3 cadre. Fiecare are o formă colorată. Desenați un dreptunghi roșu, transformați-l într-un filmClip cu F8 și setați numele MovieClip la "myObject". Asigurați-vă că punctul de înregistrare este colțul din stânga sus. Apoi creați două cadre goale noi în interiorul MovieClip. Umpleți unul cu un triunghi verde și celălalt cu un cerc albastru.
Rezultatul final ar trebui să arate cam așa:
Acum vom folosi un ComboBox, care este în principiu o listă descendentă. Asigurați-vă că instanța lui myObject pe scenă este, de asemenea, etichetă myObject. Apoi deschideți fereastra> Componente și trageți elementul "ComboBox" în bibliotecă. Dacă nu utilizați IDE-ul Flash, trebuie să faceți clic dreapta> Export la SWC ComboBox din bibliotecă.
Acum putem crea variabila "myComboBox", plasată deasupra funcției constructor.
privat var myComboBox: ComboBox = ComboBox nou ()
Apoi, adăugați următorul cod la constructorul principal ():
// Stopase myObject MovieClip pe primul cadru myObject.gotoAndStop (1) // adaugă următoarele obiecte la ComboBox și le dă fiecare etichete unice myComboBox.addItem (label: "Rectangle") myComboBox.addItem (label: "Circle") myComboBox.addItem (label: "Triangle") // adaugă ComboBox addChild (myComboBox) // Mută-l la coordonatele corecte myComboBox.move (280,150)
Iată o imagine a modului în care ar trebui să apară cererea dvs. atunci când executați:
myObject
CadreVrem ca filmulețul nostru să schimbe cadrele atunci când selectăm un alt element!
Să începem prin adăugarea unui EventListener constructorului nostru - ascultătorul evenimentului Event.CHANGE - care verifică pentru a vedea când se schimbă obiectul selectat în ComboBox. Aceasta este exact atunci când utilizatorul alege un nou element ComboBox.
myComboBox.addEventListener (Event.CHANGE, changeObjectFrame)
Apoi vom crea funcția changeObjectFrame (). Această funcție verifică pentru a vedea ce este eticheta curentă din ComboBox, care este numele obiectului pe care l-a selectat utilizatorul. Acesta va merge apoi la cadrul corect de myObject
pentru a afișa tipul de obiect selectat.
schimbarea funcției privateObjectFrame (e: Event): void //myComboBox.selectedLabel este numele obiectului curent selectat pe care l-am definit mai devreme ... if (myComboBox.selectedLabel == "Rectangle") myObject.gotoAndStop (1) dacă myComboBox.selectedLabel == "Triunghi") myObject.gotoAndStop (2) dacă (myComboBox.selectedLabel == "Cerc") myObject.gotoAndStop (3)
Acum puteți continua și puteți compila aplicația. Ar trebui să puteți comuta la un obiect diferit selectând-l din meniul derulant.
Apoi, să adăugăm animație programului nostru. Du-te în myObject
FilmClip pe primul cadru. Selectați întregul dreptunghi roșu și apăsați F8 pentru al transforma într-un filmClip. Asigurați-vă că punctul de înregistrare se află în colțul din stânga sus. Faceți acest lucru cu fiecare formă din interiorul lui myObject
MovieClip
Apoi va trebui să oferim fiecărui film un animație. Du-te în formă de dreptunghi MovieClip și clic dreapta> Creare Shape Tween pe umplere roșie forma.
Apoi selectați cel de-al 60-lea cadru al filmuluiClipClip de pe cronologie și apăsați F6 pentru a crea un nou cadru cheie. Faceți acest lucru și cu cel de-al 30-lea cadru. Acum puteți să mergeți la cel de-al 30-lea cadru și să schimbați culoarea umplerii formei. Am ales să schimb culoarea într-o portocală aurie. Acum, dacă jucați animația, culoarea ar trebui să se modifice de la Red> Orange> Roșu.
Continuați și faceți acest lucru pentru fiecare formă din myObject
MovieClip. Acum puteți continua și puteți compila aplicația; fiecare formă selectată va schimba culorile.
Aplicația curentă ar trebui să acționeze astfel:
Acum, permiteți utilizatorului să deseneze un pic de obicei pe filmul clip. Acest lucru este similar cu ultimul tutorial în care am permis utilizatorului să deseneze un design personalizat pe player. Cu toate acestea, vom face un pas mai departe în acest tutorial, permițând utilizatorului să salveze mesajul său. Dar să zicem Salvați pentru mai târziu!
Să începem prin crearea unei instanțe a clasei Shape. Adăugați acest cod deasupra constructorului dvs.:
privat var myCanvas: Formă = nouă Formă ()
Înainte vom adăuga variabila myCanvas la scenă ... Adăugați acest cod în partea de jos a constructorului nostru.
addChild (myCanvas))
Vom face asta foarte repede. Dacă doriți mai multe explicații cu privire la modul de utilizare a clasei Shape pentru desen, vă rugăm să verificați celalalt tutorial.
Începeți prin crearea unei variabile mouseIsDown ...
// Verifică dacă mouse-ul este în jos privat var mouseIsDown: Boolean = false
Acum mergeți mai departe și adăugați următorii ascultători de evenimente:
stage.addEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) Stage.addEventListener (MouseEvent.MOUSE_DOWN, mouseDown) stage.addEventListener (MouseEvent.MOUSE_UP, mouseUp)
Și aici sunt cele 3 funcții care sunt atașate la EventListeners:
funcția privată mouseUp (e: MouseEvent): void mouseIsDown = false funcția privată mouseDown (e: MouseEvent): void mouseIsDown = true // mișcă cursorul mouse-ului myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY) ; funcția privată drawDoodle (e: MouseEvent): void // Dacă mouse-ul este apăsat dacă (mouseIsDown) // Face setările de desene drept myCanvas.graphics.lineStyle (5, 0, 1) // Desenează linia doodle myCanvas. graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY);
Acum puteți testa programul și ar trebui să trageți bine. Cu toate acestea, încă nu am limitat spațiul de desen al pânzei noastre, așa că desenele din afara granițelor myObject încă arată. În următorul pas, vom rezolva toate acestea!
În tutorialul meu anterior, procesul de mascare a fost foarte ușor deoarece fiecare obiect mascat a rămas același în întreaga aplicație. De data aceasta, trebuie să avem o mască care să se adapteze fiecărui film.
Să mergem mai departe și să clic dreapta> Copiați-ne myObject
pe scena. Acum trebuie să faceți clic dreapta> Paste în Plasarea obiectului, astfel încât acesta este exact locul în care se află myObject
a fost. Acum, modificați numele instanței la "myObjectAsMask". Treceți la clasa principală și adăugați următoarele linii la constructor:
// Toate acestea ar trebui să fie explicite! myCanvas.mask = myObjectAsMask myObjectAsMask.gotoAndStop (1)
Până în prezent, masca ar trebui să funcționeze numai pentru primul obiect. Trebuie să ajustăm funcția changeObjectFrame pentru a schimba masca noastră pentru a satisface noua formă a myObject. Adăugați codul evidențiat la funcția changeObjectFrame:
schimbarea funcției privateObjectFrame (e: Event): void if (myComboBox.selectedLabel == "Rectangle") myObject.gotoAndStop (1) dacă (myComboBox.selectedLabel == "Triunghi") myObject.gotoAndStop (2) (myComboBox.selectedLabel == "Cercul") myObject.gotoAndStop (3) // Curăță doodle myCanvas.graphics.clear () // Sincronizează cadrele myObject și myObjectAsMask myObjectAsMask.gotoAndStop (myObject.currentFrame)
Următorul pas: vom adăuga un buton de salvare în aplicația noastră. Mai târziu, aceasta va salva toate datele mele myObject într-un SharedObject. Creați un nou buton și proiectați-l cu toate acestea doriți. Am inclus butonul propriu dar vă arăt cum să desenați nu este important.
Glisați o instanță a butonului pe scenă și dați-i numele instanței "saveStuff". Apoi, adăugați constructorului următorul ascultător de evenimente:
saveStuff.addEventListener (MouseEvent.CLICK, saveObjectData)
Apoi, adăugați această funcție goală pe care o vom folosi pentru a adăuga codul nostru care salvează obiectul.
funcția privată saveObjectData (e: MouseEvent): void
Pentru a începe să folosiți clasa SharedObject, va trebui să creați o nouă instanță a clasei SharedObject. Dacă nu ați folosit vreodată clasa SharedObject, atunci ar fi un moment potrivit pentru a verifica acest tutorial cu privire la lucrul cu SharedObjects pentru a obține o idee de bază despre modul în care funcționează. Utilizați acest cod pentru a crea un SharedObject:
privată var mySaveData: SharedObject = SharedObject.getLocal ("saveData")
Mergeți în interiorul funcției saveObjectData și adăugați următorul cod pentru a începe operația de salvare:
// Crează o nouă matrice în interiorul programului var myDataArrayInProgram: Array = new Array () // Adăugă niște date aleatoare în Array noastre myDataArrayInProgram.push ("WhateverDataYouWant") // Creează o variabilă în SharedObject // și își stabilește valoarea valoarea // array local // mySaveData.data.myDataArray = myDataArrayInProgram // "Flushes" datele aflate în memorie pentru a fi salvate în // computer (deși numele sugerează altfel, // aceasta stochează datele!) mySaveData.flush ()
Dacă doriți să verificați dacă acest cod este eficient, trebuie doar să adăugați acest fragment de cod în partea de jos a funcției:
trace (mySaveData.data.myDataArray)
Până acum, totul este bine. Am reușit să creăm un SharedObject și am stocat cu succes câțiva octeți de date în el. Următorul pas este să începeți pregătirea programului nostru pentru reconstituirea filmului nostru. În acest pas, vom adăuga toate datele necesare în SharedObject pentru aplicația noastră pentru a reconstrui filmul de la zero.
Pentru a face acest lucru, va trebui să împingem toate datele noastre în array myDataArrayInProgram astfel încât acesta să fie atașat la SharedObject. Am modificat funcția saveObjectData pentru a face toate acestea. Puteți să o vizualizați mai jos:
(myObject.x) // adaugă locația Y a obiectului myDataArrayInProgram.push (myObject.y) // adaugă obiectul currentFrame // (obiectul curent ales) myDataArrayInProgram.push (myObject.currentFrame) // adaugă cadrul curent al animației obiectului curent // myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) mySaveData. data.myDataArray = MyDataArrayInProgram mySaveData.flush () trace (mySaveData.data.myDataArray)
IMPORTANT: getChildAt ()
accesează copiii obiectului pe baza indicelui lor. Când există un singur obiect într-un film, puteți fi sigur că getChildAt (0)
te va duce la asta!
MAI IMPORTANT: Nu vă faceți griji dacă primiți următoarea eroare:
1119: Accesul la actualFrame de proprietate nedefinită printr-o referință cu tipul static flash.display: DisplayObject.
Dacă da, probabil că ați activat modul Strict în setările dvs. flash. Problema este că getChildAt ()
returnează un DisplayObject și bliț, care ar putea fi un Bitmap, Sprite, MovieClip etc. Problema cu DisplayObject.currentFrame
este că numai clasa MovieClip are proprietatea curentăFrame, deoarece nici o altă clasă nu are animație.
Pentru a rezolva acest lucru, accesați: File> Publish Settings> Actionscript Settings și debifați "Errors: Strict Mode"
Editor: Alternativ, ai putea arunca obiectul returnat de getChildAt () ca un filmClip, după cum urmează:myDataArrayInProgram.push ((myObject.getChildAt (0) ca MovieClip) .currentFrame)
Acest lucru spune Flash, "trata acest obiect la fel de A MovieClip".
Nu suntem în scenă, dar putem utiliza datele noastre de salvare, dar este bine să creați opțiunea UI pentru a încărca în prealabil SharedObject. La fel ca butonul de salvare, puteți proiecta acest buton pentru a fi oricum doriți; Nu te voi face să tragi.
Creați un nou buton și trageți o instanță pe scenă. Apoi setați numele instanței la "loadStuff".
Acum adăugați următorul Listener de evenimente:
loadStuff.addEventListener (MouseEvent.CLICK, loadObjectData)
Și să creați funcția loadObjectData așa:
funcția privată loadObjectData (e: MouseEvent): void
Acum, să adăugăm un nou buton interfeței noastre. Acest buton va șterge totul în SharedObject și, de asemenea, va șterge doodle-ul curent pe MyCanvas.
La fel ca celelalte butoane, îmi voi alege propriul grafic; puteți alege propria dvs. sau utilizați mina.
De data aceasta puteți seta numele instanței butonului la "clearStuff".
Acum adăugați acest Listener de evenimente:
clearStuff.addEventListener (MouseEvent.CLICK, clearObjectData)
Și creați funcția clearObjectData așa cum este:
funcția privată clearObjectData (e: MouseEvent): void // Clear SharedObject mySaveData.clear () // Șterge grafica myCanvas myCanvas.graphics.clear ()
Acum începeți să întrebați: "De ce nu pot salva doodle-ul utilizatorului ca orice altă proprietate?" Din păcate, Flash nu vă permite să salvați direct MovieClips, Bitmaps sau chiar Shapes în interiorul unui SharedObject, dar puteți face acest lucru salvând pixelul cu valoarea pixelului imaginii.
Trebuie să vă întrebați: "Dar doodlul nu este un bitmap, este o imagine vectorială desenată de utilizator conținută în formă ?!" Așa este, dar putem să îl convertim în date bazate pe Bitmap, luând un instantaneu al acestuia cu clasa BitmapData!
Mergeți mai departe și creați următoarea variabilă deasupra constructorului aplicației noastre principale:
privat var bitmapDataSnapshot: BitmapData
Această variabilă va fi "camera" care va lua un instantaneu al doodle.
Acum adăugați următoarele linii evidențiate la funcția saveObjectData în locația prezentată mai jos:
funcția privată saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = array nou () myDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) / / Crează o nouă instanță a clasei BitmapData, // face dimensiunea stadiului, permite transparența, // și setează umplerea la un bitmap transparent albDataSnapshot = nou BitmapData (640, 480, true, 0) // Comentează camera pentru a face un snapshot // din myCanvas, ignoră următorii 3 parametri, // și spune zona de instantanee să includă numai // lucrurile acoperite de myObject MovieClip bitmapDataSnapshot.draw (myCanvas, null, null, null, new Rectangle 250, 30, 150, 100)) mySaveData.data.myDataArray = MyDataArrayInProgram MySaveData.flush () trace (mySaveData.data.myDataArray)
Să încheiem procesul de salvare a programului nostru. Acum că am creat o instanță BitmapData cu toate datele myCanvas, trebuie să o stocăm într-un ByteArray pentru a fi trimis în SharedObject. Pentru a face acest lucru, putem folosi o funcție foarte utilă în interiorul clasei BitmapData. Numele lui este getPixels ()
.
getPixels ()
returnează o ByteArray a tuturor datelor pixel ale unei BitmapData. Spre deosebire de clasa BitmapData, ByteArrays poate sa să fie stocate în SharedObjects, astfel încât acestea să fie instrumentul potrivit pentru salvarea Doodle-ului nostru.
Tot ce trebuie să faceți este să adăugați această linie de cod în funcția saveObjectData imediat după ce terminați lucrarea BitmapData:
// Pune valoarea returnată // ByteArray a funcției getPixels () // în myDataArrayInProgram // getPixels () necesită un dreptunghi care // arată ce parte din pixelii obiectului // dorim de fapt! // NOTĂ: Dreptunghiul curent este numai // o aproximare a locului în care ar trebui să apară doodle //! mySaveData.data.myDataArray.push (bitmapDataSnapshot.getPixels (nou dreptunghi (250, 30, 150, 100)))
Până la ultimul pas. Odată ce datele sunt salvate, este necesar ca utilizatorul să actualizeze pagina, pentru a dovedi că doodlul lor a fost salvat pe unitatea hard disk și nu doar că este stocat în memorie temporară. Desenați o cutie neagră în jurul scenei și adăugați un text care îi cere jucătorului să se reîmprospăteze. Apoi selectați întregul obiect și apăsați F8. Asigurați-vă că ați bifat caseta "Export pentru acțiuni" și setați "Clasa" în "RefreshScreen". Acum puteți șterge obiectul de pe scenă ...
Mai jos este ecranul de refresh pe care l-am desenat:
Acum, adăugați acest cod în partea de jos a funcției saveObjectData:
addChild (nou refreshScreen ())
Funcția terminată saveObjectData ar trebui să arate astfel:
funcția privată saveObjectData (e: MouseEvent): void var myDataArrayInProgram: Array = array nou () 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, new Rectangle (250, 30, 150, 100)) myDataArrayInProgram.push (bitmapDataSnapshot.getPixels , 150, 100))) mySaveData.data.myDataArray = MyDataArrayInProgram MySaveData.flush () trace (mySaveData.data.myDataArray) addChild (nou refreshScreen ())
Este timpul să reconstruim întreaga noastră Doodle de la ByteArray pe care am salvat-o mai devreme!
Trebuie să vă gândiți: "Ce naiba o fac cu un ByteArray, este doar o grămadă de mumbo-jumbo ciudat!" Și ai dreptate! Din fericire, Adobe ne-a dat și o mare funcție numită setPixels ()
pe care le oferiți același dreptunghi și ByteArray, pentru a crea aceeași BitmapData pe care ați avut-o!
Înainte de a reconstrui întregul nostru MovieClip, ar trebui să mergem înainte și să facem un test pentru a vedea dacă putem reconstitui BitmapData în sine. Modificați-vă loadObjectData
funcția astfel încât să arate astfel:
Funcția privată loadObjectData (e: MouseEvent): void // Creează o BitmapData și face // aceasta dimensiunea stadiului și // aplică toate setările vechi var loadBitmapData: BitmapData = BitmapData nouă (640, 480, true, 1) // Setează pixelii lui loadBitmap // folosind dreptunghiul nostru vechi și // accesând SaveData ByteArray // (al patrulea element din myDataArray (myDataArray [3]) loadBitmapData.setPixels (nou dreptunghi (250, 30, 150 , 100), mySaveData.data.myDataArray [3]) // Creează un nou Bitmap și îi spune să-și încarce imaginea din loadBitmapData var: Bitmap = Bitmap nou (loadBitmapData) // Mută masca obiect // playhead frame-ul drept myObjectAsMask.gotoAndStop (mySaveData.data.myDataArray [2]) // maschează imaginea cu masca display.mask = myObjectAsMask // adaugă Bitmap-ul în etapa addChild (afișare)
Acum este momentul să puneți asta împreună! În primul rând, faceți clic dreapta pe myObject
(în bibliotecă)> Proprietăți. Acum bifați caseta "Export pentru acțiuni" și setați "Class" la "myObjectType". Comparați proprietățile cu cele din imagine:
Dacă e la fel, atunci suntem gata să plecăm! Adăugați mai sus constructorul nostru:
privat var myNewObject: myObjectType;
Si adauga toate din acest punct de sus loadObjectData ()
.
// Crează o nouă instanță a myObjectType (myObject) myNewObject = new myObjectType () // Setează poziția X la veche myNewObject.x = MySaveData.data.myDataArray [0] // Setează Y la vechea pozitie myNewObject.y = mySaveData.data.myDataArray [1] // Selectează obiectul vechi myNewObject.gotoAndStop (mySaveData.data.myDataArray [2]) // Mută cursorul în cadrul de animație drept myNewObject.getChildAt (0) .notoAndStop (mySaveData.data .myDataArray [3]) // adaugă obiectul în stadiul addChild (myNewObject) // elimină ascultătorul evenimentului comboBox myComboBox.removeEventListener (Event.CHANGE, changeObjectFrame) // elimină ascultătorii evenimentului "doStuff" pentru butoanele saveStuff.removeEventListener (MouseEvent .CLICK, saveObjectData) loadStuff.removeEventListener (MouseEvent.CLICK, loadObjectData) clearStuff.removeEventListener (MouseEvent.CLICK, clearObjectData) // elimină ascultătorii evenimentelor de desen stage.removeEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.removeEventListener (MouseEvent.MOUSE_DOWN, mouseDown ) cerb e.removeEventListener (MouseEvent.MOUSE_UP, mouseUp) // elimina UI-ul inutil removeChild (myObject) removeChild (saveStuff) removeChild (loadStuff) removeChild (clearStuff) removeChild (myComboBox) removeChild (myCanvas)
Testați aplicația, ar trebui să funcționeze perfect.
Felicitări! Ați reconstruit oficial un filmClip utilizând clasa SharedObject!
Dacă aplicația de mai sus funcționează, ar trebui să prezinte o imagine întreruptă de unde ați salvat myObject. Pentru a reda animația pentru a reda, să creați un buton "Redare". Iată cel pe care l-am ales:
Trageți-l doar dedesubt myObject
pe scenă și setați numele de instanță la "playAnimation".
Acum adaugati aceasta in partea de jos a constructorului nostru:
// Butonul ascunde playAnimation.visible = false // adaugă butoane Event Listener playAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation)
Apoi puneți acest lucru în partea de jos a lui loadObjectData ()
.
// Afișează butonul playAnimation.visible = true
În cele din urmă, adăugați această funcție la programul dvs.:
funcția privată playObjectAnimation (e: MouseEvent): void myNewObject.play ()
Aici este codul sursă aplicație finală. Dacă există vreo diferență între codul dvs. și acest lucru, mergeți înapoi și vedeți unde ați făcut o altă cale.
pachet 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; importul flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.net.SharedObject; clasa publica principala se extinde Sprite private var myComboBox: ComboBox = noua comboBox () privat var myCanvas: Shape = new Shape () private var mouseIsDown: boolean = false privat var mySaveData: SharedObject = SharedObject.getLocal ("saveData") privat var bitmapDataSnapshot : (): MyCombBox.addItem (label: "Rectangle") myComboBox.addItem (label: "Triangle" myComboBox.addItem (MouseEvent.MOUSE_MOVE, drawDoodle) stage.addEventListener (MouseEvent.MOUSE_DOWN) addChild (myComboBox) myComboBox.move (280, 150) myComboBox.addEventListener (Event.CHANGE, changeObjectFrame) , 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 eEvent.CLICK, clearObjectData) playAnimation.visible = false playAnimation.addEventListener (MouseEvent.CLICK, playObjectAnimation) funcția privată clearObjectData (e: MouseEvent): void mySaveData.clear () myCanvas.graphics.clear e: MouseEvent): void myNewObject = new myObjectType () myNewObject.x = MySaveData.data.myDataArray [0] myNewObject.y = MySaveData.data.myDataArray [1] myNewObject.gotoAndStop (mySaveData.data.myDataArray [2]) (MouseEvent.CLICK, saveObjectData) loadStuff.removeEventListener (MouseEvent.CLICK, MouseEvent.CLICK, saveObjectDownload) MouseEvent.CLICK, saveObject.getChildAt (0) .notoAndStop (mySaveData.data.myDataArray [3]) addChild (myNewObject) myComboBox.removeEventListener (Event.CHANGE, changeObjectFrame) loadObjectData) clearStuff.removeEventListener (MouseEvent.MOUSE_MOVE, drawDoodle) stage.removeEventListener (MouseEvent.MOUSE_DOWN, mouseDown) etapa.removeEventListener (MouseEvent.MOUSE_UP, mouseUp) remo vChild (myObject) removeChild (saveStuff) removeChild (loadStuff) removeChild (clearStuff) removeChild (myComboBox) removeChild (myCanvas) var loadBitmapData: BitmapData = new BitmapData (640, 480, true, 1) loadBitmapData.setPixels , 150, 100), mySaveData.data.myDataArray [4]) var afișare: Bitmap = Bitmap nou (loadBitmapData) myObjectAsMask.gotoAndStop (mySaveData.data.myDataArray [2]) display.mask = myObjectAsMask addChild (display) playAnimation.visible = true playObjectAnimation (e: MouseEvent): void myNewObject.getChildAt (0) .play () playAnimation.visible = false funcția privată saveObjectData (e: MouseEvent): void var myDataArrayInProgram: MyDataArrayInProgram.push (myObject.x) myDataArrayInProgram.push (myObject.y) myDataArrayInProgram.push (myObject.currentFrame) myDataArrayInProgram.push (myObject.getChildAt (0) .currentFrame) bitmapDataSnapshot = noua BitmapData (640, 480, true, 0) bitmapDataSnapshot.draw (myCanvas, null, null, null, noul Recta ngle (250, 30, 150, 100)) myDataArrayInProgram.push (bitmapDataSnapshot.getPixels (nou dreptunghi (250, 30, 150, 100))) mySaveData.data.myDataArray = myDataArrayInProgram mySaveData.flush () trace (mySaveData.data. myDataArray) funcția privată mouseUp (e: MouseEvent): void mouseIsDown = false funcția privată mouseDown (e: MouseEvent): void mouseIsDown = true myCanvas.graphics.moveTo (myCanvas.mouseX, myCanvas.mouseY); funcția privată drawDoodle (e: MouseEvent): void if (mouseIsDown) myCanvas.graphics.lineStyle (5, 0, 1) myCanvas.graphics.lineTo (myCanvas.mouseX, myCanvas.mouseY); funcția privată changeObjectFrame (e: Event): void if (myComboBox.selectedLabel == Rectangle) myObject.gotoAndStop (1) dacă (myComboBox.selectedLabel == Triunghi) myObject.gotoAndStop dacă (myComboBox.selectedLabel == "Cerc") myObject.gotoAndStop (3) myCanvas.graphics.clear () myObjectAsMask.gotoAndStop (myObject.currentFrame)
După cum puteți vedea, cu un pic de tweaking, este absolut posibil să salvați toate datele MovieClip în SharedObjects pentru încărcare ulterioară. Acest lucru înseamnă că dacă scrieți un joc, puteți crea cu ușurință stări de salvare în loc de a avea mici puncte de control ...
Succes la utilizarea acestei metode de salvare a datelor pe jocurile și aplicațiile dvs., pentru a vă ajuta să vă faceți programele mai bune decât oricând!
Vă mulțumim pentru lectură!