ByteArray er en ekstremt kraftig klasse som kan brukes til mange ting relatert til datamanipulering, inkludert (men ikke begrenset til) lagring av spilldata online, kryptering av data, komprimering av data og omdanning av et BitmapData-objekt til en PNG- eller JPG-fil. I denne introduksjonen bruker vi ByteArray-klassen til å ta et innfødt AS3-objekt og kode det til en streng som kan lagres på en server for senere gjenoppretting, og deretter avkode den senere.
I tidligere opplæringsprogrammer har vi sett hvordan du bruker XML og JSON til å kode data i et tekstlig (String) format. Imidlertid er både XML og JSON designet for å være menneskelige lesbare, og som et resultat de er mye lengre enn de trenger å være. Det kan også være vanskelig å konvertere bestemte typer AS3-objekter til enten format. ByteArray har noen virkelig avanserte funksjoner, men til å begynne med, ser vi bare på en enkel en: det gjør det veldig enkelt å slå et AS3-objekt inn i en streng.
La oss se på det endelige resultatet vi vil jobbe for:
Når du limer inn en kodet ByteArray-streng i TextField og klikker Last inn-knappen, dekrypterer den den og viser objektegenskapene som er lagret i den. Du kan prøve følgende kodede ByteArrays; kopi-lim dem inn i TextField og klikk på Last inn-knappen for å se hva jeg snakker om:
// Denne ByteArray vil vise dataene mine (Dette er standard ByteArray lastet) CgsBFW9jY3VwYXRpb24GB0NUTw93ZWJzaXRlBiFodHRwOi8vaWt0LmNvLmlkCW5hbWUGDVRhdWZpawE =
// Dette ByteArray vil vise min nåværende tanke CgsBIWZvb2RfZm9yX3Rob3VnaHQGgnVJIGFtIHRoaW5raW5nIG9uIHNoYXJpbmcgdGhlIHRlY2huaXF1ZSBpIHVzZWQgdG8gbWFrZSBhIEZ1bGwgRmxhc2ggRHluYW1pYyBXZWJzaXRlIFNFTyBGcmllbmRseSBmb3IgbXkgbmV4dCBUdXRvcmlhbCBpbiBBY3RpdmVUdXRzKy4uLiA8dT5XaGF0IGRvIHlvdSB0aGluaz88L3U + IDxiPmlzIGl0IGEgZ29vZCBpZGVhPC9iPj8B
// Dette ByteArray vil snakke om Flash og SEO og min erfaring med dem CgsBEXF1ZXN0aW9uBoEDPGI + PHU + Q2FuIGEgZnVsbHkgZHluYW1pYyBGbGFzaCBXZWJzaXRlIGJlIFNFTyBmcmllbmRseTwvdT48L2I + Pz8NYW5zd2VyBoM / SXQgY2FuLCBoZXJlIGlzIHRoZSBwcm9vZiwgPGEgaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY28uaWQvc2VhcmNoP3E9Zmxhc2grc2VvJmllPXV0Zi04Jm9lPXV0Zi04JmFxPXQnIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3Lmdvb2dsZS5jby5pZC9zZWFyY2g / cT1mbGFzaCtzZW8maWU9dXRmLTgmb2U9dXRmLTgmYXE9dDwvYT4sIGlrdC5jby5pZCBpcyByYW5rZWQgIzYgb3ZlciB0aGVyZQE =
I vinduet "Flash Builder":
I vinduet "New ActionScript Project":
Kopier Base64.as til prosjektkatalogen "com".
Base64.as vil komme til bruk senere. Det er av Steve Webster, som pleide å bo på dynamicflash.com (han forlot Flash-samfunnet for noen år siden).
I TUTORIAL_ByteArray
klasse (som er hovedklassen), vennligst importer følgende klasser for denne opplæringen:
pakke import flash.display.Sprite; importer flash.text.TextField; importer flash.text.TextFieldType; importere flash.text.TextFieldAutoSize; importer flash.text.TextFormat; importer flash.events.MouseEvent; importere flash.utils.ByteArray; importer com.Base64; offentlig klasse TUTORIAL_ByteArray utvider Sprite offentlig funksjon TUTORIAL_ByteArray ()
Legg til følgende kode innvendig TUTORIAL_ByteArray
Konstruent for en veldig enkel test.
offentlig funksjon TUTORIAL_ByteArray () var _test: String = "Hei verden!"; spor (_test);
Trykk F11-tasten for å kjøre dette prosjektet, du bør få meldingen inne i konsollvinduet.
La oss nå prøve å spore meldingen inni _test
variabel, men denne gangen vil vi gjøre det fra en annen funksjon:
offentlig funksjon TUTORIAL_ByteArray () var _test: String = "Hei verden!"; TestFunction (); privat funksjon TestFunksjon (): void trace (_test);
Trykk CTRL + S for å lagre prosjektet. En feil oppdaget etter at du lagret prosjektet ditt Dette skyldes at en variabel som er erklært inne i en funksjon, ikke vil være tilgjengelig for noen annen funksjon. Så for dette tilfellet må vi erklære _test
variabel utenfor:
offentlig funksjon TUTORIAL_ByteArray () TestFunction (); privat funksjon TestFunksjon (): void trace (_test); private var _test: String = "Hei verden!";
Vennligst legg til følgende private variabler for dette prosjektet:
offentlig funksjon TUTORIAL_ByteArray () TestFunction (); privat funksjon TestFunksjon (): void trace (_test); private var _test: String = "Hello World!"; privat var _loadButton: TextField; privat var _inputField: TextField; privat var _testObject: Objekt; private var _testByteArray: ByteArray;
La oss lage et enkelt brukergrensesnitt for dette prosjektet.
Nå som vi trenger å vise noe i prosjektet, må vi deklarere våre scenestørrelser (Check Line 13).
Gi nytt navn til TestFunction til InitUI-funksjonen, og sett inn følgende linje koder inni. Vennligst les forklaringen kommentert inne i koden.
[SWF (width = "550" ,, frameRate = "60", pageTitle = "Tutorial ByteArray")] offentlig klasse TUTORIAL_ByteArray strekker seg Sprite public function TUTORIAL_ByteArray () InitUI (); privat funksjon InitUI (): void // Initialiser våre TextFields slik at vi kan bruke dem _loadButton = new TextField (); _inputField = nytt TextField (); // Gi en standardTextFormat for dem begge (Tahoma ved 11pt, farget 0x777777) _loadButton.defaultTextFormat = _inputField.defaultTextFormat = ny TextFormat ("Tahoma", 11, 0x777777); // Gi begge dem en ramme _loadButton.border = _inputField.border = true; // Sett autosize for vår Load Button, slik at den automatisk krympes / vokser for å passe inn i _loadButton.autoSize = TextFieldAutoSize.LEFT; // Sett det valgbare av vår lasteknapp til feil, slik at brukeren ikke kan velge teksten i den _loadButton.selectable = false; // Sett multiline og wordWrap av Inngangsfeltet til ekte, slik at en lang tekst automatisk blir pakket inn i neste linje _inputField.multiline = _inputField.wordWrap = true; // Aktiver brukeren til å skrive noe inn i Inngangsfeltet, ved å angi denne typen eiendom _inputField.type = TextFieldType.INPUT; // Sett litt tekst inn i begge dem _loadButton.text = "Load"; _inputField.text = ""; // Legg begge inn i scenen, slik at de er synlige for våre besøkende addChild (_inputField); addChild (_loadButton); // Plasser innsatsfeltet og gjør det større _inputField.x = 25; _inputField.y = 25; _inputField.width = 200; _inputField.height = 150; // Det er grunnen til at jeg gjorde dette, slik at lasteknappen ligger rett under vårt inngangsfelt // Så du kan plassere Inngangsfeltet hvor som helst du vil, så lenge det er denne koden, holder lastetasten under Input Field _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x;
Trykk F11 for å kjøre dette prosjektet og se det enkle brukergrensesnittet vi har opprettet.
Vennligst les forklaringen kommentert inne i koden
_loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; // Legg til en Event Listener for vår _loadButton, så når brukeren klikker denne knappen, // Flash vil ringe _loadButton_CLICK () Metode _loadButton.addEventListener (MouseEvent.CLICK, _loadButton_CLICK, false, 0, true); // Denne metoden vil bli kalt når brukeren klikker på _loadButton privat funksjon _loadButton_CLICK (Hendelser: MouseEvent = null): void // Få noe som brukeren skriver inn og lagre dem i vår _test-variabelen _test = _inputField.text; // Spor _test-variabelsporingen ("Bruker skriver inn følgende melding:" + _test);
Trykk F11 for å kjøre dette prosjektet; prøv å skrive noe inn i _inputField
og klikk deretter på _loadButton
. Dette er den mest grunnleggende teknikken for å få en variabel fra brukeren vår og lagre den i vår private variabel.
Vi har endelig kommet fram til våre viktigste skritt i dette prosjektet, men før vi fortsetter, la meg gi en mental stimulans for å tenke. For tiden i vårt prosjekt er vi i stand til å få en string
og lagre den i vår private variabel. Men det er bare en streng; hva med om jeg vil at en bruker skal skrive inn noe inni _inputField
slik at jeg kan få en Gjenstand fra det? Hva skal brukeren skrive? Svaret er en 'Encoded Base64 ByteArray'
Vi vil fortsette sakte denne gangen, slik at du vil forstå ByteArray-klassen og kunne lage din egen datamanipulering og bruke den til dine egne prosjekter. Vennligst les forklaringen kommentert i koden:
offentlig funksjon TUTORIAL_ByteArray () InitUI (); CreateByteArray (); private funksjon CreateByteArray (): void // Initialiser vår _testObject-variabel, slik at vi kan fylle mange dynamiske egenskaper og lagre Stringdata i den (vi laster dem senere når brukeren klikket på _loadButton) _testObject = nytt objekt (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialiser vår _byteArray-variabel, slik at vi kan begynne å konvertere objekt til en ByteArray _testByteArray = ny ByteArray (); // Konverter objektet til Byte Array, Slik gjør du det, for å konvertere et objekt til en byteray, det er enkelt det er ikke det? :)) _testByteArray.writeObject (_testObject); // Lets se om alt fungerer skikkelig spor ("Vår første ByteArray opprettet ::" + _testByteArray.toString ());
Trykk F11 for å kjøre dette prosjektet. Se hvor enkelt det er, denne ByteArray er en ekstremt kraftig klasse, og likevel er det ikke vanskelig i det hele tatt. Vi har tatt et innfødt AS3-objekt og konvertert det til Action Message Format.
Før du sender dataene til vårt PHP-skript ved hjelp av GET-metoden, bør vi konvertere den til en Base64-streng. Dette skyldes at Base64 kan bæres av XML (og ved HTML).
Vennligst les forklaringen kommentert i koden.
privat funksjon CreateByteArray (): void // Initialiser vår _testObject variabel, slik at vi kan fylle mange dynamiske egenskaper og lagre String data i den // (vi laster dem senere når brukeren klikker _loadButton) _testObject = nytt objekt (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialiser vår _byteArray-variabel, slik at vi kan begynne å konvertere objekt til en ByteArray _testByteArray = ny ByteArray (); // Konverter objektet til Byte Array, Slik gjør du det, for å konvertere et objekt til en byteray, det er enkelt det er ikke det? :)) _testByteArray.writeObject (_testObject); // Kode ByteArray til Base64 String (slik at vi kan sende dem via PHP eller kopiere teksten til notisblokken), igjen er det veldig enkelt! var kodet: String = Base64.encodeByteArray (_testByteArray); // Sett den kodede Base64-strengen i vår _inputField (slik at vi kan kopiere dem til notisblokk) _inputField.text = encoded;
Trykk F11 for å kjøre dette prosjektet. Hvis du konverterer et objekt til en ByteArray, er det enkelt å konvertere Byte-verdien av dataene til Base64 String, takket være Base64.as.
Vi vil forsøke å dekode Base64-strenge i et objekt når brukeren klikker på _loadButton
, endre vår _loadButton_CLICK
funksjon. Vennligst les forklaringen kommentert i koden:
privat funksjon _loadButton_CLICK (Hendelser: MouseEvent = null): void // Vi må ta noen feilforsøk // Vi dekoder vår kodede Base64-streng i en ByteArray, slik at vi kan hente vårt Object back var DecodedByteArray: ByteArray = Base64. decodeToByteArray (_inputField.text); // Hvis du konverterer et objekt til ByteArray, er det enkelt å hente et objekt fra ByteArray som dette var LoadedObject: Object = DecodedByteArray.readObject (); // Forbered deg på å utdata alle egenskaper og deres verdier inne i LoadedObject var Output: String = ""; for (var VarName: String i LoadedObject) Output + = VarName + ":" + LoadedObject [VarName] + "
"; // Utfør dem i vår _inputField _inputField.htmlText = Output; fangst (feil: Feil) _inputField.text =" Vennligst skriv inn en kodet ByteArray i denne TextField før du klikker på 'Last inn' -knappen. Feilmelding :: "+ err.message;
Trykk F11 for å kjøre dette prosjektet. Vi får vår kodede Base64-streng av vår _testObject
inne i vår _inputField
; Klikk på _loadButton
For å se vårt prosjekt konvertere denne Base64-strengen tilbake og vise alle dens egenskaper og verdier. Du kan prøve å kopiere og lime inn Base64-strengene i begynnelsen av denne opplæringen og lese alle mine meldinger.
ByteArray-klassen er en ekstremt kraftig klasse, og likevel er det veldig enkelt å bruke. Jeg har sett mange flotte Flash-apps der ute, og bruker denne ByteArray til å utføre så mange tankebrytende datahåndtering, som de som jeg nevnte i begynnelsen av denne opplæringen. Jeg har hørt mange Flash-spillere bruker XML for å lagre sine besøkende "Lagre spilldata", men som vi alle allerede vet, er XML et helvete av en svært komplisert klasse, med ByteArray kan jeg lagre noe som dette, EASILY.
privat funksjon CreateByteArray (): void _testObject = nytt objekt (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; _testObject.level = 99; // Få tilstanden til denne spillkarakter inventar var _inventory: Array = new Array (item_id: 5, amount: 1, item_id: 85, amount: 1, item_id: 42, amount: 5); _testObject.inventory = _inventory; // Hent hva er ferdigheten de allerede nivåer opp var _skill: Array = nytt Array (skill_id: 1, level: 0, skill_id: 2, level: 1); _testObject.skill = _skill; // Initialiser vår _byteArray-variabel, slik at vi kan begynne å konvertere objekt til en ByteArray _testByteArray = ny ByteArray (); // Konverter objektet til Byte Array, Slik gjør du det, for å konvertere et objekt til en byteray, det er enkelt det er ikke det? :)) _testByteArray.writeObject (_testObject); // Kode ByteArray til Base64 String (slik at vi kan sende dem via PHP eller kopiere teksten til notisblokken), igjen er det veldig enkelt! var kodet: String = Base64.encodeByteArray (_testByteArray); // Sett den kodede Base64-strengen i vår _inputField (slik at vi kan kopiere dem til notisblokk) _inputField.text = encoded;
Ja, noe som er komplisert, tar bare et par koder, forestill deg gruen om å lagre denne data ved hjelp av XML og hente dem tilbake for videre bruk. Alt i alt må jeg si at med Byte data manipulasjon kan du oppnå mange ting, og noen kan være løsningen du har latt etter hele denne tiden.
Jeg håper du har funnet denne opplæringen nyttig. Takk for at du leste!