ByteArray este o clasă extrem de puternică care poate fi utilizată pentru multe lucruri legate de manipularea datelor, inclusiv (dar fără a se limita la) salvarea datelor online despre jocuri, criptarea datelor, comprimarea datelor și conversia unui obiect BitmapData într-un fișier PNG sau JPG. În această introducere, vom folosi clasa ByteArray pentru a lua un obiect nativ AS3 și pentru al codifica la un șir care ar putea fi salvat pe un server pentru recuperare ulterioară, apoi decodifică ulterior.
În tutorialele anterioare am văzut cum să folosim XML și JSON pentru a codifica datele într-un format textual (String). Cu toate acestea, atât XML, cât și JSON sunt concepute astfel încât să poată fi citite de oameni și, prin urmare, sunt mult mai lungi decât trebuie. De asemenea, poate fi dificil să se transforme anumite tipuri de obiecte AS3 în format. ByteArray are câteva caracteristici cu adevărat avansate, dar, pentru început, vom examina doar unul simplu: face foarte ușor să transformăm un obiect AS3 într-un șir.
Să aruncăm o privire asupra rezultatului final pe care îl vom strădui:
Când inserați un șir ByteArray codificat în TextField și faceți clic pe butonul Încărcare, acesta va decripta și va afișa proprietățile obiectului salvate în acesta. Puteți încerca următoarele ByteArrays codificate; copiați-le inserați în TextField și faceți clic pe butonul Încărcați pentru a vedea ce vorbesc:
// Acest ByteArray va afișa datele mele (Aceasta este implicită încărcată ByteArray) CgsBFW9jY3VwYXRpb24GB0NUTw93ZWJzaXRlBiFodHRwOi8vaWt0LmNvLmlkCW5hbWUGDVRhdWZpawE =
// Acest ByteArray va arăta gândul meu curent CgsBIWZvb2RfZm9yX3Rob3VnaHQGgnVJIGFtIHRoaW5raW5nIG9uIHNoYXJpbmcgdGhlIHRlY2huaXF1ZSBpIHVzZWQgdG8gbWFrZSBhIEZ1bGwgRmxhc2ggRHluYW1pYyBXZWJzaXRlIFNFTyBGcmllbmRseSBmb3IgbXkgbmV4dCBUdXRvcmlhbCBpbiBBY3RpdmVUdXRzKy4uLiA8dT5XaGF0IGRvIHlvdSB0aGluaz88L3U + IDxiPmlzIGl0IGEgZ29vZCBpZGVhPC9iPj8B
// Acest ByteArray va vorbi despre Flash și SEO și experiența mea cu ei CgsBEXF1ZXN0aW9uBoEDPGI + PHU + Q2FuIGEgZnVsbHkgZHluYW1pYyBGbGFzaCBXZWJzaXRlIGJlIFNFTyBmcmllbmRseTwvdT48L2I + Pz8NYW5zd2VyBoM / SXQgY2FuLCBoZXJlIGlzIHRoZSBwcm9vZiwgPGEgaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY28uaWQvc2VhcmNoP3E9Zmxhc2grc2VvJmllPXV0Zi04Jm9lPXV0Zi04JmFxPXQnIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3Lmdvb2dsZS5jby5pZC9zZWFyY2g / cT1mbGFzaCtzZW8maWU9dXRmLTgmb2U9dXRmLTgmYXE9dDwvYT4sIGlrdC5jby5pZCBpcyByYW5rZWQgIzYgb3ZlciB0aGVyZQE =
În fereastra "Flash Builder":
În fereastra "New ActionScript Project":
Copiați Base64.as în directorul proiectului 'com'.
Base64.as va fi utilă mai târziu. Este de Steve Webster, care a locuit la dynamicflash.com (a părăsit comunitatea Flash acum câțiva ani).
În TUTORIAL_ByteArray
(care este clasa principală), vă rugăm să importați următoarele clase pentru acest tutorial:
pachet import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; importul flash.events.MouseEvent; import flash.utils.ByteArray; import com.Base64; clasa publică TUTORIAL_ByteArray extinde Sprite funcția publică TUTORIAL_ByteArray ()
Adăugați următorul cod în interior TUTORIAL_ByteArray
Constructor pentru un test foarte simplu.
funcția publică TUTORIAL_ByteArray () var _test: String = "Bună ziua lume!"; trace (_test);
Apăsați tasta F11 pentru a rula acest proiect, ar trebui să primiți mesajul în fereastra Console.
Acum să încercăm să urmărim mesajul înăuntru _Test
dar de data aceasta o vom face dintr-o altă funcție:
funcția publică TUTORIAL_ByteArray () var _test: String = "Bună ziua lume!"; TestFunction (); funcția privată TestFunction (): void trace (_test);
Apăsați CTRL + S pentru a salva proiectul. A apărut o eroare după salvarea proiectului; aceasta se datorează faptului că o variabilă care a fost declarată în interiorul unei funcții nu va fi disponibilă pentru nicio altă funcție. Deci, pentru acest caz, trebuie să declarăm _Test
variabilă în afara:
funcția publică TUTORIAL_ByteArray () TestFunction (); funcția privată TestFunction (): void trace (_test); private var _test: String = "Salut lume!";
Adăugați următoarele variabile private pentru acest proiect:
funcția publică TUTORIAL_ByteArray () TestFunction (); funcția privată TestFunction (): void trace (_test); private var _test: String = "Hello World!"; privat var _loadButton: TextField; privat var _inputField: TextField; privat var _testObject: obiect; privat var _testByteArray: ByteArray;
Să creați o interfață de utilizator simplă pentru acest proiect.
Acum, că trebuie să afișăm ceva în proiectul nostru, trebuie să declare dimensiunile noastre de scenă (Linia de verificare 13).
Redenumiți funcția TestFunction în funcția InitUI și plasați următoarea linie de coduri înăuntru. Citiți explicația comentată în interiorul codului.
[SWF (width = "550" ,, frameRate = "60", pageTitle = "Tutorial ByteArray")] TUTORIAL_ByteArray extinde Sprite funcția publică TUTORIAL_ByteArray () InitUI (); funcția privată InitUI (): void // Inițializați TextField-urile noastre astfel încât să le putem folosi _loadButton = new TextField (); _inputField = nou TextField (); // Oferă un defaultTextFormat pentru ambele (Tahoma la 11pt, colorat 0x777777) _loadButton.defaultTextFormat = _inputField.defaultTextFormat = TextFormat nou ("Tahoma", 11, 0x777777); // Dați fiecăruia o margine _loadButton.border = _inputField.border = true; // Setați autozizuirea pentru butonul de încărcare, astfel încât acesta să se micșoreze / să crească automat pentru a se potrivi cu textul din interiorul _loadButton.autoSize = TextFieldAutoSize.LEFT; // Setați butonul de încărcare selectabil la fals, astfel încât utilizatorul să nu poată selecta textul în el _loadButton.selectable = false; // Setați multiline și wordWrap din Câmpul de intrare la adevărat, astfel încât un lung text va fi înfășurat automat la următoarea linie _inputField.multiline = _inputField.wordWrap = true; // Activați utilizatorul să scrie ceva în câmpul de introducere, prin setarea acestui tip de proprietate _inputField.type = TextFieldType.INPUT; // Puneți un text în ambele _loadButton.text = "Încărcați"; _inputField.text = ""; // Adăugați-le pe ambele în scenă, astfel încât acestea să fie vizibile vizitatorilor noștri addChild (_inputField); addChild (_loadButton); // Poziționați câmpul de introducere și faceți-l mai mare _inputField.x = 25; _inputField.y = 25; _inputField.width = 200; _inputField.height = 150; // Există un motiv pentru care am făcut acest lucru, astfel încât butonul de încărcare să fie situat direct sub câmpul de introducere // Astfel încât să puteți poziționa câmpul de introducere oriunde doriți, atâta timp cât există acest cod, butonul de încărcare se va lipi mai jos câmpul de intrare _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x;
Apăsați F11 pentru a rula acest proiect și a vedea interfața de utilizator simplă pe care am creat-o.
Citiți explicația comentată în interiorul codului
_loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; // Adăugați un Listener pentru evenimentul nostru _loadButton, deci ori de câte ori utilizatorul face clic pe acest buton, // Flash va apela _loadButton_CLICK () Metoda _loadButton.addEventListener (MouseEvent.CLICK, _loadButton_CLICK, false, 0, true); // Această metodă va fi apelată de fiecare dată când utilizatorul face clic pe funcția privată _loadButton _loadButton_CLICK (Evenimente: MouseEvent = null): void // Obțineți ceva pe care utilizatorul îl introduce și le salvează în _test variabila _test = _inputField.text; // Trasați următoarea variabilă _test ("Introducerea de către utilizator a următorului mesaj:" + _test);
Apăsați F11 pentru a rula acest proiect; încercați să introduceți ceva în _inputField
apoi faceți clic pe _loadButton
. Aceasta este tehnica cea mai de bază de a obține o variabilă de la utilizatorul nostru și de ao depozita în variabila noastră privată.
În cele din urmă, am ajuns la pașii cei mai importanți din acest proiect, dar înainte de a continua, permiteți-mi să ofer un stimulent mental pentru gândire. În prezent, în proiectul nostru, suntem capabili să obținem o Şir
și stocarea în variabila noastră privată. Dar este doar un șir; ce zici dacă vreau ca un utilizator să introducă ceva înăuntru _inputField
astfel încât să pot obține o Obiect din ea? Ce ar trebui să utilizeze tipul de utilizator? Răspunsul este o "bază codificată ByteArray"
Vom proceda încet de această dată, astfel încât să înțelegeți clasa ByteArray și să vă puteți crea propriile manipulări de date și să le aplicați proiectelor proprii. Citiți explicația comentată în interiorul codului:
funcția publică TUTORIAL_ByteArray () InitUI (); CreateByteArray (); funcția privată CreateByteArray (): void // Inițializați variabila _testObject astfel încât să putem popula mai multe proprietăți dinamice și să stocăm date String în ea (le vom încărca mai târziu de fiecare dată când utilizatorul a făcut clic pe _loadButton) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Inițializați variabila _byteArray, astfel încât să putem începe să convertim obiectul într-un ByteArray _testByteArray = nou ByteArray (); // Conversia obiectului în Byte Array, acesta este modul în care îl faci, pentru a converti un obiect într-un ByteArray, este simplu nu este it? :)) _testByteArray.writeObject (_testObject); // Să vedem dacă totul funcționează corespunzător ("Primul nostru ByteArray a creat ::" + _testByteArray.toString ());
Apăsați F11 pentru a rula acest proiect. Vedeți cât de simplu este, acest ByteArray este o clasă extrem de puternică și totuși nu este greu deloc. Am luat un obiect AS3 nativ și l-am convertit în Format mesaj de acțiune.
Înainte de a trimite datele către PHP Script folosind metoda GET, ar trebui să o convertim într-o Base64 String. Acest lucru se datorează faptului că Base64 poate fi purtat prin XML (și prin HTML).
Citiți explicația comentată în cadrul codului.
funcția privată CreateByteArray (): void // Inițializați variabila _testObject, astfel încât să putem popula multe proprietăți dinamice și să stocăm date String în ea // (le vom încărca mai târziu ori de câte ori utilizatorul face clic pe _loadButton) _testObject = Object new (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Inițializați variabila _byteArray, astfel încât să putem începe să convertim obiectul într-un ByteArray _testByteArray = nou ByteArray (); // Conversia obiectului în Byte Array, acesta este modul în care îl faci, pentru a converti un obiect într-un ByteArray, este simplu nu este it? :)) _testByteArray.writeObject (_testObject); // Encodeaza ByteArray in Base64 String (astfel incat sa le putem trimite prin PHP sau sa copiem textul in notepad), din nou ESTE FOARTE SIMPLU! var codificat: String = Base64.encodeByteArray (_testByteArray); // Pune codul Base64 String în _inputField (pentru a le putea copia în notepad) _inputField.text = codificat;
Apăsați F11 pentru a rula acest proiect. Dacă convertirea unui obiect într-un ByteArray este simplă, convertirea valorii byte a datelor noastre în Base64 String este la fel de simplă, datorită Base64.as.
Vom încerca să decodifice șirul Base64 introdus într-un obiect ori de câte ori utilizatorul face clic pe _loadButton
, schimba-ne _loadButton_CLICK
funcţie. Citiți explicația comentată în interiorul codului:
Funcția privată _loadButton_CLICK (Evenimente: MouseEvent = null): void // Trebuie să prindem orice eroare încercați // Decodificăm codul nostru Base64 String într-un ByteArray, astfel încât să putem prelua Obiectul nostru înapoi dec DecodedByteArray: ByteArray = Base64. decodeToByteArray (_inputField.text); // Dacă convertirea unui obiect în ByteArray este simplă, preluarea unui Obiect din ByteArray este la fel de simplă ca și acest var LoadedObject: Object = DecodedByteArray.readObject (); // Pregătiți pentru a ieși toate proprietățile și valorile lor în interiorul lui LoadedObject var Output: String = ""; pentru (Var VarName: String în LoadedObject) Ieșire + = VarName + ":" + LoadedObject [VarName] + "
"; // Ieșiți-le în _inputField _inputField.htmlText = Output; captură (err: Error) _inputField.text =" Introduceți un ByteArray codificat în acest TextField înainte de a da clic pe butonul "Încărcare". Mesaj de eroare: "+ err.message;
Apăsați F11 pentru a rula acest proiect. Obținem codul nostru Base64 String al nostru _testObject
în interiorul nostru _inputField
; apasă pe _loadButton
pentru a vedea proiectul nostru transforma acest Base64 String înapoi și să afișeze toate proprietățile și valorile. Puteți încerca să copiați și să lipiți șirurile Base64 la începutul acestui tutorial și să citiți toate mesajele mele.
Clasa ByteArray este o clasă extrem de puternică și totuși este foarte simplă de folosit. Am văzut multe aplicații Flash excelente acolo folosind acest ByteArray pentru a efectua atât de multe manipulări de suflare a minții, cum ar fi acele tipuri pe care le-am menționat la începutul acestui tutorial. Am auzit mulți programatori de jocuri flash care folosesc XML pentru a salva vizitatorii lor "Salvează datele despre jocuri", dar după cum știm deja, XML este un dracu de o clasă foarte complicată, cu ByteArray pot salva ceva de genul asta EASY.
funcția privată CreateByteArray (): void _testObject = Object nou (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; _testObject.level = 99; // Obțineți starea acestui Inventar de caractere joc var _inventory: Array = array nou item_id: 5, sumă: 1, item_id: 85, suma: 1, item_id: 42, suma: 5); _testObject.inventory = _inventory; // Obțineți ceea ce este abilitatea pe care o au deja nivelul de var _skill: Array = array nou (skill_id: 1, level: 0, skill_id: 2, level: 1); _testObject.skill = _skill; // Inițializați variabila _byteArray, astfel încât să putem începe să convertim obiectul într-un ByteArray _testByteArray = nou ByteArray (); // Conversia obiectului în Byte Array, acesta este modul în care îl faci, pentru a converti un obiect într-un ByteArray, este simplu nu este it? :)) _testByteArray.writeObject (_testObject); // Encodeaza ByteArray in Base64 String (astfel incat sa le putem trimite prin PHP sau sa copiem textul in notepad), din nou ESTE FOARTE SIMPLU! var codificat: String = Base64.encodeByteArray (_testByteArray); // Pune codul Base64 String în _inputField (pentru a le putea copia în notepad) _inputField.text = codificat;
Da, ceva complicat are nevoie doar de o serie de coduri, imaginați-vă oroarea de a salva aceste date utilizând XML și de a le readuce înapoi pentru utilizare ulterioară. În general, trebuie să spun că prin manipularea datelor Byte puteți obține o mulțime de lucruri, iar unele ar putea fi soluția pe care ați căutat-o tot timpul.
Sper că ați găsit acest tutorial util. Vă mulțumim pentru lectură!