ByteArray is een extreem krachtige klasse die voor veel dingen met betrekking tot gegevensmanipulatie kan worden gebruikt, inclusief (maar niet beperkt tot) het opslaan van online gamegegevens, het coderen van gegevens, het comprimeren van gegevens en het converteren van een BitmapData-object naar een PNG- of JPG-bestand. In deze inleiding gebruiken we de klasse ByteArray om een native AS3-object te nemen en het te coderen naar een tekenreeks die op een server kan worden opgeslagen voor later herstel en deze later kan decoderen.
In eerdere zelfstudies hebben we gezien hoe XML en JSON kunnen worden gebruikt om gegevens in een tekstuele (tekenreeks) -indeling te coderen. Zowel XML als JSON zijn echter ontworpen om door mensen leesbaar te zijn, en daarom zijn ze veel langer dan ze moeten zijn. Het kan ook lastig zijn om bepaalde typen AS3-objecten naar beide indelingen te converteren. ByteArray heeft een aantal echt geavanceerde functies, maar om te beginnen kijken we naar een eenvoudige: het maakt het heel gemakkelijk om van een AS3-object een String te maken.
Laten we eens kijken naar het eindresultaat waar we naartoe zullen werken:
Wanneer u een gecodeerde ByteArray-reeks in het TextField plakt en op de knop Laden klikt, wordt deze gedecodeerd en worden de objecteigenschappen weergegeven die daarin zijn opgeslagen. U kunt de volgende gecodeerde ByteArrays proberen; kopieer ze in het TextField en klik op de knop Laden om te zien waar ik het over heb:
// Deze ByteArray toont mijn gegevens (dit is de standaard ByteArray geladen) CgsBFW9jY3VwYXRpb24GB0NUTw93ZWJzaXRlBiFodHRwOi8vaWt0LmNvLmlkCW5hbWUGDVRhdWZpawE =
// Dit ByteArray zal mijn huidige gedachte CgsBIWZvb2RfZm9yX3Rob3VnaHQGgnVJIGFtIHRoaW5raW5nIG9uIHNoYXJpbmcgdGhlIHRlY2huaXF1ZSBpIHVzZWQgdG8gbWFrZSBhIEZ1bGwgRmxhc2ggRHluYW1pYyBXZWJzaXRlIFNFTyBGcmllbmRseSBmb3IgbXkgbmV4dCBUdXRvcmlhbCBpbiBBY3RpdmVUdXRzKy4uLiA8dT5XaGF0IGRvIHlvdSB0aGluaz88L3U + IDxiPmlzIGl0IGEgZ29vZCBpZGVhPC9iPj8B tonen
// Dit ByteArray zal spreken over Flash en SEO en mijn ervaring met hen CgsBEXF1ZXN0aW9uBoEDPGI + PHU + Q2FuIGEgZnVsbHkgZHluYW1pYyBGbGFzaCBXZWJzaXRlIGJlIFNFTyBmcmllbmRseTwvdT48L2I + Pz8NYW5zd2VyBoM / SXQgY2FuLCBoZXJlIGlzIHRoZSBwcm9vZiwgPGEgaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY28uaWQvc2VhcmNoP3E9Zmxhc2grc2VvJmllPXV0Zi04Jm9lPXV0Zi04JmFxPXQnIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3Lmdvb2dsZS5jby5pZC9zZWFyY2g / cT1mbGFzaCtzZW8maWU9dXRmLTgmb2U9dXRmLTgmYXE9dDwvYT4sIGlrdC5jby5pZCBpcyByYW5rZWQgIzYgb3ZlciB0aGVyZQE =
In het venster 'Flash Builder':
In het venster 'New ActionScript Project':
Kopieer Base64.as in de map 'com' van uw project.
Base64.as zal later nuttig worden. It's door Steve Webster, die vroeger op dynamicflash.com woonde (hij verliet de Flash-gemeenschap een paar jaar geleden).
In TUTORIAL_ByteArray
class (wat de hoofdklasse is), importeer de volgende klassen voor deze tutorial:
pakket import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; import flash.events.MouseEvent; import flash.utils.ByteArray; import com.Base64; openbare klasse TUTORIAL_ByteArray breidt uit openbare functie TUTORIAL_ByteArray ()
Voeg de volgende code toe TUTORIAL_ByteArray
Constructor voor een zeer eenvoudige test.
public function TUTORIAL_ByteArray () var _test: String = "Hallo wereld!"; trace (_test);
Druk op de F11-toets om dit project uit te voeren, u zou het bericht in het consolevenster moeten krijgen.
Laten we nu eens proberen het bericht binnen te halen _test
variabele, maar deze keer doen we het vanuit een andere functie:
public function TUTORIAL_ByteArray () var _test: String = "Hallo wereld!"; TestFunction (); private function TestFunction (): void trace (_test);
Druk op CTRL + S om uw project op te slaan. Een fout ontdekt nadat u uw project hebt opgeslagen; Dit komt omdat een variabele die in een functie is gedeclareerd niet beschikbaar is voor een andere functie. Dus voor dit geval moeten we de _test
veranderlijk buiten:
openbare functie TUTORIAL_ByteArray () TestFunction (); private function TestFunction (): void trace (_test); private var _test: String = "Hallo wereld!";
Voeg de volgende privévariabelen toe voor dit project:
openbare functie TUTORIAL_ByteArray () TestFunction (); private function TestFunction (): void trace (_test); private var _test: String = "Hallo wereld!"; privé var _loadButton: TextField; private var _inputField: TextField; privé var _testObject: Object; private var _testByteArray: ByteArray;
Laten we een eenvoudige gebruikersinterface maken voor dit project.
Nu dat we iets in ons project moeten weergeven, moeten we onze stadiumgroottes declareren (vinkje 13).
Hernoem onze TestFunction in de InitUI-functie en plaats de volgende regel met codes erin. Lees de toelichting in de code.
[SWF (width = "550" ,, frameRate = "60", pageTitle = "Tutorial ByteArray")] public class TUTORIAL_ByteArray breidt openbare functie TUTORIAL_ByteArray () InitUI () uit; private function InitUI (): void // Initialiseer onze TextFields zodat we ze kunnen gebruiken _loadButton = new TextField (); _inputField = new TextField (); // Geef een defaultTextFormat voor beide (Tahoma op 11pt, gekleurd 0x777777) _loadButton.defaultTextFormat = _inputField.defaultTextFormat = new TextFormat ("Tahoma", 11, 0x777777); // Geef ze beide een border _loadButton.border = _inputField.border = true; // Stel de autosize in voor onze Load-knop, zodat deze automatisch krimpt / groeit zodat deze in de tekst binnen _loadButton past. AutoSize = TextFieldAutoSize.LEFT; // Stel de selecteerbare van onze Load-knop in op false, zodat de gebruiker de tekst erin niet kan selecteren _loadButton.selectable = false; // Stel de multiline en wordWrap van ons invoerveld in op true, zodat een lange tekst automatisch wordt ingepakt naar de volgende regel _inputField.multiline = _inputField.wordWrap = true; // Schakel gebruiker in om iets in ons invoerveld te typen, door dit type-eigenschap _inputField.type = TextFieldType.INPUT in te stellen; // Plaats wat tekst in beide _loadButton.text = "Laden"; _inputField.text = ""; // Voeg ze beide toe aan het podium, zodat ze zichtbaar zijn voor onze bezoekers addChild (_inputField); addChild (_loadButton); // Plaats ons invoerveld en maak het groter _inputField.x = 25; _inputField.y = 25; _inputField.width = 200; _inputField.height = 150; // Er is een reden waarom ik dit heb gedaan, zodat de knop Load zich direct onder ons invoerveld bevindt // Zodat u het invoerveld waar u maar wilt kunt positioneren, zolang er maar deze code is, blijft de knop Load hieronder staan het invoerveld _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x;
Druk op F11 om dit project uit te voeren en de eenvoudige gebruikersinterface te bekijken die we hebben gemaakt.
Lees de toelichting in de code
_loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; // Voeg een gebeurtenis-luisteraar toe voor onze _loadButton, dus wanneer de gebruiker op deze knop klikt, // Flash roept _loadButton_CLICK () methode _loadButton.addEventListener (MouseEvent.CLICK, _loadButton_CLICK, false, 0, true); // Deze methode wordt aangeroepen wanneer de gebruiker op de privéfunctie _loadButton klikt _loadButton_CLICK (gebeurtenissen: MouseEvent = null): void // Haal alles op wat de gebruiker heeft ingevoerd en sla deze op in onze _test-variabele _test = _inputField.text; // Traceer de _test variabele trace ("gebruiker voert het volgende bericht in:" + _test);
Druk op F11 om dit project uit te voeren; probeer iets in te typen _invoer veld
en klik vervolgens op de _loadButton
. Dit is de meest basale techniek om een variabele van onze gebruiker te krijgen en op te slaan in onze privévariabele.
We hebben eindelijk onze belangrijkste stappen in dit project bereikt, maar voordat we verder gaan, laat me een mentale prikkel geven om te denken. Momenteel zijn we in ons project in staat om een Draad
en het opslaan in onze privévariabele. Maar het is maar een string; hoe zit het als ik wil dat een gebruiker iets intypt _invoer veld
zodat ik een kan krijgen Voorwerp van het? Wat moet de gebruiker typen? Het antwoord is een 'Encoded Base64 ByteArray'
We zullen dit keer langzaam doorgaan, zodat je de ByteArray-klasse begrijpt en in staat bent om je eigen gegevensmanipulatie te maken en deze toe te passen op je eigen projecten. Lees de toelichting in de code:
openbare functie TUTORIAL_ByteArray () InitUI (); CreateByteArray (); private function CreateByteArray (): void // Initialiseer onze _testObject-variabele, zodat we veel dynamische eigenschappen kunnen invullen en String-gegevens kunnen opslaan (we laden ze later telkens wanneer de gebruiker op _loadButton klikt) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialiseer onze _byteArray-variabele, zodat we kunnen beginnen met het converteren van een object in een ByteArray _testByteArray = new ByteArray (); // Converteer het object naar Byte Array, dit is hoe u het doet, om een object in een bytearray te converteren, IT IS SIMPLE is het niet? :)) _testByteArray.writeObject (_testObject); // Laat zien of alles correct werkt traceer ("Onze eerste ByteArray gemaakt:" + _testByteArray.toString ());
Druk op F11 om dit project uit te voeren. Zie hoe eenvoudig het is, deze ByteArray is een extreem krachtige klasse en toch is het helemaal niet moeilijk. We hebben een native AS3-object gemaakt en dit geconverteerd naar Action Message Format.
Voordat we de gegevens naar ons PHP-script verzenden met behulp van de GET-methode, moeten we deze naar een Base64-reeks converteren. Dit komt omdat Base64 kan worden uitgevoerd door XML (en door HTML).
Lees de toelichting in de code.
private function CreateByteArray (): void // Initialiseer onze _testObject-variabele, zodat we veel dynamische eigenschappen kunnen invullen en String-gegevens erin kunnen opslaan // (we laden ze later telkens wanneer de gebruiker op _loadButton klikt) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialiseer onze _byteArray-variabele, zodat we kunnen beginnen met het converteren van een object in een ByteArray _testByteArray = new ByteArray (); // Converteer het object naar Byte Array, dit is hoe u het doet, om een object in een bytearray te converteren, IT IS SIMPLE is het niet? :)) _testByteArray.writeObject (_testObject); // Codeer de ByteArray in Base64 String (zodat we ze via PHP kunnen verzenden of de tekst naar een kladblok kunnen kopiëren), opnieuw IS HET ZEER EENVOUDIG! var-gecodeerd: String = Base64.encodeByteArray (_testByteArray); // Zet de gecodeerde Base64 String in ons _inputField (zodat we ze in een kladblok kunnen kopiëren) _inputField.text = gecodeerd;
Druk op F11 om dit project uit te voeren. Als het converteren van een object in een bytearray eenvoudig is, is het converteren van de bytewaarde van onze gegevens in Base64 String net zo eenvoudig, dankzij Base64.as.
We zullen proberen de ingevoerde Base64 String in een object te decoderen wanneer de gebruiker op de knop klikt _loadButton
, verander onze _loadButton_CLICK
functie. Lees de toelichting in de code:
private function _loadButton_CLICK (Events: MouseEvent = null): void // We moeten eventuele fouten proberen proberen // We decoderen onze gecodeerde Base64 String in een ByteArray, zodat we onze Object terug kunnen ophalen var DecodedByteArray: ByteArray = Base64. decodeToByteArray (_inputField.text); // Als het converteren van een object in ByteArray eenvoudig is, is het ophalen van een object uit ByteArray net zo eenvoudig als dit var LoadedObject: Object = DecodedByteArray.readObject (); // Bereid je voor om alle eigenschappen en hun waarden binnen het LoadedObject uit te voeren var Output: String = ""; for (var VarName: String in LoadedObject) Output + = VarName + ":" + LoadedObject [VarName] + "
"; // Voer ze uit naar ons _inputField _inputField.htmlText = Output; catch (err: Error) _inputField.text =" Voer een gecodeerde bytearray in dit TextField in voordat u op de knop 'Laden' klikt. Foutbericht :: "+ err.message;
Druk op F11 om dit project uit te voeren. We krijgen onze gecodeerde Base64-string van onze _testObject
in onze _invoer veld
; Klik op de _loadButton
om te zien dat ons project deze Base64-string terug converteert en alle eigenschappen en waarden ervan weergeeft. Je kunt de Base64-strings proberen te kopiëren en plakken aan het begin van deze tutorial en al mijn berichten lezen.
De ByteArray-klasse is een extreem krachtige klasse, en toch is het heel eenvoudig te gebruiken. Ik heb veel geweldige Flash-apps gezien die deze ByteArray gebruiken om zoveel manipulatieve gegevensmanipulatie uit te voeren, zoals de soorten die ik aan het begin van deze tutorial noemde. Ik heb gehoord dat veel Flash-spelprogrammeurs XML gebruiken om hun bezoekers "Save Game Data" te besparen, maar zoals we allemaal al weten, is XML een heel ingewikkelde klasse, met ByteArray kan ik zoiets GEMAKKELIJK besparen.
private function CreateByteArray (): void _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; _testObject.level = 99; // Krijg de status van deze Game Character Inventory var _inventory: Array = new Array (item_id: 5, amount: 1, item_id: 85, amount: 1, item_id: 42, amount: 5); _testObject.inventory = _inventory; // Krijg wat de vaardigheid is die ze al nivelleren var_skill: Array = new Array (skill_id: 1, level: 0, skill_id: 2, level: 1); _testObject.skill = _skill; // Initialiseer onze _byteArray-variabele, zodat we kunnen beginnen met het converteren van een object in een ByteArray _testByteArray = new ByteArray (); // Converteer het object naar Byte Array, dit is hoe u het doet, om een object in een bytearray te converteren, IT IS SIMPLE is het niet? :)) _testByteArray.writeObject (_testObject); // Codeer de ByteArray in Base64 String (zodat we ze via PHP kunnen verzenden of de tekst naar een kladblok kunnen kopiëren), opnieuw IS HET ZEER EENVOUDIG! var-gecodeerd: String = Base64.encodeByteArray (_testByteArray); // Zet de gecodeerde Base64 String in ons _inputField (zodat we ze in een kladblok kunnen kopiëren) _inputField.text = gecodeerd;
Ja, iets dat gecompliceerd is, duurt maar een paar regels, stel je de gruwel voor van het opslaan van deze gegevens met XML en het terughalen voor verder gebruik. Al met al moet ik zeggen dat je met Byte-gegevensmanipulatie heel wat dingen kunt bereiken, en sommigen misschien de oplossing zijn waar je al die tijd naar op zoek was.
Ik hoop dat je deze tutorial nuttig hebt gevonden. Bedankt voor het lezen!