ByteArray ist eine extrem leistungsfähige Klasse, die für viele Zwecke im Zusammenhang mit der Datenmanipulation verwendet werden kann, einschließlich (aber nicht beschränkt auf) Online-Speichern von Spieldaten, Verschlüsseln von Daten, Komprimieren von Daten und Konvertieren eines BitmapData-Objekts in eine PNG- oder JPG-Datei. In dieser Einführung verwenden wir die ByteArray-Klasse, um ein natives AS3-Objekt in eine Zeichenfolge zu kodieren, die zur späteren Wiederherstellung auf einem Server gespeichert und anschließend dekodiert werden kann.
In vorherigen Tutorials haben wir gesehen, wie Sie mit XML und JSON Daten in einem Textformat (String) kodieren. Sowohl XML als auch JSON sind jedoch so konzipiert, dass sie für Menschen lesbar sind. Daher sind sie viel länger als nötig. Es kann auch schwierig sein, bestimmte AS3-Objekttypen in beide Formate zu konvertieren. ByteArray hat einige wirklich erweiterte Funktionen, aber zunächst betrachten wir nur eine einfache: Es macht es sehr einfach, ein AS3-Objekt in einen String umzuwandeln.
Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten:
Wenn Sie eine codierte ByteArray-Zeichenfolge in das TextField einfügen und auf die Schaltfläche Load klicken, wird sie entschlüsselt und die darin gespeicherten Objekteigenschaften angezeigt. Sie können die folgenden codierten ByteArrays ausprobieren. Kopieren Sie sie in das Textfeld und klicken Sie auf die Schaltfläche Laden, um zu sehen, worüber ich spreche:
// Dieses ByteArray zeigt meine Daten an. (Dies ist das standardmäßig geladene ByteArray.)
// Das ByteArray wird meine aktuellen Gedanken CgsBIWZvb2RfZm9yX3Rob3VnaHQGgnVJIGFtIHRoaW5raW5nIG9uIHNoYXJpbmcgdGhlIHRlY2huaXF1ZSBpIHVzZWQgdG8gbWFrZSBhIEZ1bGwgRmxhc2ggRHluYW1pYyBXZWJzaXRlIFNFTyBGcmllbmRseSBmb3IgbXkgbmV4dCBUdXRvcmlhbCBpbiBBY3RpdmVUdXRzKy4uLiA8dT5XaGF0IGRvIHlvdSB0aGluaz88L3U + IDxiPmlzIGl0IGEgZ29vZCBpZGVhPC9iPj8B zeigen
// Das ByteArray wird über Flash und SEO und meine Erfahrung mit ihnen CgsBEXF1ZXN0aW9uBoEDPGI + PHU + Q2FuIGEgZnVsbHkgZHluYW1pYyBGbGFzaCBXZWJzaXRlIGJlIFNFTyBmcmllbmRseTwvdT48L2I + Pz8NYW5zd2VyBoM / SXQgY2FuLCBoZXJlIGlzIHRoZSBwcm9vZiwgPGEgaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY28uaWQvc2VhcmNoP3E9Zmxhc2grc2VvJmllPXV0Zi04Jm9lPXV0Zi04JmFxPXQnIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3Lmdvb2dsZS5jby5pZC9zZWFyY2g / cT1mbGFzaCtzZW8maWU9dXRmLTgmb2U9dXRmLTgmYXE9dDwvYT4sIGlrdC5jby5pZCBpcyByYW5rZWQgIzYgb3ZlciB0aGVyZQE = sprechen
Innerhalb des Flash Builder-Fensters:
Im Fenster 'Neues ActionScript-Projekt':
Kopieren Sie Base64.as in Ihr Projektverzeichnis "com".
Base64.as wird später nützlich sein. Es ist von Steve Webster, der früher bei dynamicflash.com lebte (er ist vor einigen Jahren aus der Flash-Community ausgetreten)..
Im TUTORIAL_ByteArray
Klasse (welche die Hauptklasse ist), importieren Sie bitte die folgenden Klassen für dieses Tutorial:
package 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; public class TUTORIAL_ByteArray erweitert Sprite öffentliche Funktion TUTORIAL_ByteArray ()
Fügen Sie den folgenden Code hinzu TUTORIAL_ByteArray
Konstruktor für einen sehr einfachen Test.
öffentliche Funktion TUTORIAL_ByteArray () var _test: String = "Hallo Welt!"; trace (_test);
Drücken Sie die Taste F11, um dieses Projekt auszuführen. Die Meldung sollte im Konsolenfenster angezeigt werden.
Versuchen wir nun, die Nachricht nach innen zu verfolgen _Prüfung
variabel, aber diesmal machen wir es mit einer anderen Funktion:
öffentliche Funktion TUTORIAL_ByteArray () var _test: String = "Hallo Welt!"; TestFunction (); private Funktion TestFunction (): void trace (_test);
Drücken Sie STRG + S, um Ihr Projekt zu speichern. Ein Fehler wurde nach dem Speichern Ihres Projekts entdeckt. Dies liegt daran, dass eine in einer Funktion deklarierte Variable für keine andere Funktion verfügbar ist. Für diesen Fall müssen wir also die _Prüfung
Variable außerhalb:
öffentliche Funktion TUTORIAL_ByteArray () TestFunction (); private Funktion TestFunction (): void trace (_test); private var _test: String = "Hallo Welt!";
Bitte fügen Sie die folgenden privaten Variablen für dieses Projekt hinzu:
öffentliche Funktion TUTORIAL_ByteArray () TestFunction (); private Funktion TestFunction (): void trace (_test); private var _test: String = "Hallo Welt!"; private var _loadButton: TextField; private var _inputField: TextField; private var _testObject: Objekt; private var _testByteArray: ByteArray;
Erstellen Sie eine einfache Benutzeroberfläche für dieses Projekt.
Nun, da wir etwas in unserem Projekt anzeigen müssen, müssen wir unsere Bühnengrößen angeben (Check-Zeile 13)..
Benennen Sie unsere TestFunction in InitUI-Funktion um und fügen Sie die folgende Codezeile ein. Bitte lesen Sie die Erklärung im Code.
[SWF (width = "550" ,, frameRate = "60", pageTitle = "Tutorial ByteArray")] Die öffentliche Klasse TUTORIAL_ByteArray erweitert Sprite öffentliche Funktion TUTORIAL_ByteArray () InitUI (); private Funktion InitUI (): void // Initialisiert unsere TextFields, damit wir sie verwenden können _loadButton = new TextField (); _inputField = new TextField (); // Geben Sie für beide ein defaultTextFormat an (Tahoma bei 11pt, gefärbt 0x777777) _loadButton.defaultTextFormat = _inputField.defaultTextFormat = new TextFormat ("Tahoma", 11, 0x777777); // Gib beiden einen Rand _loadButton.border = _inputField.border = true; // Legen Sie die AutoSize-Größe für unseren Load-Button fest, damit er automatisch verkleinert / vergrößert wird, damit er in den Text in _loadButton.autoSize passt. = TextFieldAutoSize.LEFT; // Setzen Sie die Auswählbare Schaltfläche für den Ladebutton auf "false", damit der Benutzer den Text nicht auswählen kann. _LoadButton.selectable = false; // Setzen Sie die Multiline und WordWrap unseres Eingabefelds auf true, sodass ein langer Text automatisch in die nächste Zeile umgebrochen wird. _InputField.multiline = _inputField.wordWrap = true; // Erlaube dem Benutzer, etwas in unser Eingabefeld einzugeben, indem Sie diesen Typ festlegen property _inputField.type = TextFieldType.INPUT; // Schreibe etwas Text in beide _loadButton.text = "Load"; _inputField.text = ""; // Füge beide auf der Bühne hinzu, damit sie für unsere Besucher sichtbar sind. AddChild (_inputField); addChild (_loadButton); // Positioniere unser Eingabefeld und mache es größer _inputField.x = 25; _inputField.y = 25; _inputField.width = 200; _inputField.height = 150; // Es gibt einen Grund, warum ich das gemacht habe, so dass sich der Load-Button direkt unter unserem Eingabefeld befindet. // Damit Sie das Input-Feld an beliebiger Stelle positionieren können, bleibt der Load-Button unten, solange dieser Code vorhanden ist das Eingabefeld _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x;
Drücken Sie F11, um dieses Projekt auszuführen und die von uns erstellte einfache Benutzeroberfläche anzuzeigen.
Bitte lesen Sie die Erklärung im Code
_loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; // Fügen Sie einen Event Listener für unser _loadButton hinzu. Wenn also der Benutzer auf diese Schaltfläche klickt, ruft // Flash die _loadButton_CLICK () - Methode _loadButton.addEventListener (MouseEvent.CLICK, _loadButton_CLICK, false, 0, true) auf. // Diese Methode wird aufgerufen, wenn der Benutzer auf die private Funktion _loadButton _loadButton_CLICK (Events: MouseEvent = null) klickt: void // Liefert alles, was der Benutzer eingibt, und speichert sie in unserer _test-Variablen _test = _inputField.text; // Verfolgung der _test-Variablenverfolgung ("Der Benutzer hat die folgende Nachricht eingegeben:" + _test);
Drücken Sie F11, um dieses Projekt auszuführen. Versuchen Sie etwas in das einzugeben _Eingabefeld
und klicken Sie dann auf _loadButton
. Dies ist die grundlegendste Technik, um eine Variable von unserem Benutzer abzurufen und in unserer privaten Variablen zu speichern.
Wir haben endlich unsere wichtigsten Schritte in diesem Projekt erreicht, aber bevor wir fortfahren, lassen Sie mich einen mentalen Anreiz zum Nachdenken geben. Derzeit können wir in unserem Projekt eine String
und speichern Sie es in unserer privaten Variable. Es ist aber nur eine Schnur; Wie wäre es, wenn ich möchte, dass ein Benutzer etwas drin eingibt _Eingabefeld
damit ich eine bekommen kann Objekt davon? Was soll der Benutzer eingeben? Die Antwort ist ein 'Encoded Base64 ByteArray'.
Wir werden dieses Mal langsam vorgehen, damit Sie die ByteArray-Klasse verstehen und in der Lage sind, Ihre eigene Datenmanipulation zu erstellen und auf Ihre eigenen Projekte anzuwenden. Bitte lesen Sie die Erklärung im Code:
öffentliche Funktion TUTORIAL_ByteArray () InitUI (); CreateByteArray (); private Funktion CreateByteArray (): void // Initialisiert unsere _testObject-Variable, damit wir viele dynamische Eigenschaften füllen und String-Daten darin speichern können (wir werden sie später laden, wenn der Benutzer auf _loadButton klickt) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialisieren Sie unsere _byteArray-Variable, damit wir das Objekt in ein ByteArray konvertieren können. _TestByteArray = new ByteArray (); // Konvertiere das Objekt in ein Byte-Array. So machst du es, ein Objekt in ein ByteArray zu konvertieren. IST ES EINFACH, oder? :)) _testByteArray.writeObject (_testObject); // Mal sehen, ob alles einwandfrei funktioniert trace ("Unser erstes ByteArray erstellt ::" + _testByteArray.toString ());
Drücken Sie F11, um dieses Projekt auszuführen. Sehen Sie, wie einfach es ist, dieses ByteArray ist eine extrem mächtige Klasse und dennoch ist es überhaupt nicht schwer. Wir haben ein natives AS3-Objekt genommen und es in Action Message Format konvertiert.
Bevor wir die Daten mit der GET-Methode an unser PHP-Skript senden, sollten wir sie in einen Base64-String konvertieren. Dies liegt daran, dass Base64 von XML (und von HTML) übertragen werden kann..
Bitte lesen Sie die im Code kommentierte Erklärung.
private Funktion CreateByteArray (): void // Initialisiert unsere _testObject-Variable, damit wir viele dynamische Eigenschaften füllen und String-Daten darin speichern können // (wir werden sie später laden, wenn der Benutzer auf _loadButton klickt) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initialisieren Sie unsere _byteArray-Variable, damit wir das Objekt in ein ByteArray konvertieren können. _TestByteArray = new ByteArray (); // Konvertiere das Objekt in ein Byte-Array. So machst du es, ein Objekt in ein ByteArray zu konvertieren. IST ES EINFACH, oder? :)) _testByteArray.writeObject (_testObject); // Kodiere das ByteArray in Base64 String (damit wir sie per PHP senden oder den Text in den Editor kopieren können). ES IST EINFACH EINFACH! var codiert: String = Base64.encodeByteArray (_testByteArray); // Den codierten Base64-String in unser _inputField einfügen (damit wir sie in den Editor kopieren können) _inputField.text = encoded;
Drücken Sie F11, um dieses Projekt auszuführen. Wenn das Konvertieren eines Objekts in ein ByteArray einfach ist, ist das Konvertieren des Byte-Werts unserer Daten in Base64-String dank Base64.as genauso einfach.
Wir werden versuchen, den eingegebenen Base64-String in ein Objekt zu decodieren, wenn der Benutzer auf klickt _loadButton
, ändern Sie unsere _loadButton_CLICK
Funktion. Bitte lesen Sie die Erklärung im Code:
private Funktion _loadButton_CLICK (Events: MouseEvent = null): void // Wir müssen alle Fehler versuchen try // Wir decodieren unseren codierten Base64-String in ein ByteArray, damit wir unser Object zurück var decodedByteArray abrufen können: ByteArray = Base64. decodeToByteArray (_inputField.text); // Wenn das Konvertieren eines Objekts in ByteArray einfach ist, ist das Abrufen eines Objekts aus ByteArray so einfach wie dies var var LoadedObject: Object = DecodedByteArray.readObject (); // Bereiten Sie die Ausgabe aller Eigenschaften und ihrer Werte innerhalb des LoadedObject vor. Var Ausgabe: String = ""; for (var VarName: String in LoadedObject) Ausgabe + = VarName + ":" + LoadedObject [VarName] + "
"; // Ausgabe in unser _inputField _inputField.htmlText = Output; catch (err: Error) _inputField.text =" Bitte geben Sie ein codiertes ByteArray in dieses TextField ein, bevor Sie auf die Schaltfläche 'Load' klicken. Fehlermeldung :: "+ err.message;
Drücken Sie F11, um dieses Projekt auszuführen. Wir erhalten unseren kodierten Base64-String von unserem _testObject
in unserem _Eingabefeld
; drücke den _loadButton
Um zu sehen, wie unser Projekt diesen Base64-String konvertiert, werden alle seine Eigenschaften und Werte angezeigt. Sie können versuchen, die Base64-Zeichenfolgen zu Beginn dieses Lernprogramms zu kopieren und einzufügen und alle meine Nachrichten zu lesen.
Die ByteArray-Klasse ist eine extrem mächtige Klasse, die jedoch sehr einfach zu bedienen ist. Ich habe viele tolle Flash-Apps mit diesem ByteArray gesehen, um so viele Datenmanipulationen zu betreiben, wie zum Beispiel die Arten, die ich zu Beginn dieses Tutorials erwähnte. Ich habe gehört, dass viele Flash-Spielprogrammierer XML verwenden, um ihre Besucher "Save Game Data" zu speichern, aber wie wir alle wissen, ist XML eine verdammt komplizierte Klasse: Mit ByteArray kann ich so etwas EINFACH sparen.
private Funktion CreateByteArray (): void _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; _testObject.level = 99; // Den Status dieses Game Character Inventars abrufen var _inventory: Array = neues Array (item_id: 5, Anzahl: 1, item_id: 85, Anzahl: 1, item_id: 42, Anzahl: 5); _testObject.inventory = _inventory; // Holen Sie sich den Skill, den sie bereits aufsteigen. Var _skill: Array = new Array (skill_id: 1, level: 0, skill_id: 2, level: 1); _testObject.skill = _skill; // Initialisieren Sie unsere _byteArray-Variable, damit wir das Objekt in ein ByteArray konvertieren können. _TestByteArray = new ByteArray (); // Konvertiere das Objekt in ein Byte-Array. So machst du es, ein Objekt in ein ByteArray zu konvertieren. IST ES EINFACH, oder? :)) _testByteArray.writeObject (_testObject); // Kodiere das ByteArray in Base64 String (damit wir sie per PHP senden oder den Text in den Editor kopieren können). ES IST EINFACH EINFACH! var codiert: String = Base64.encodeByteArray (_testByteArray); // Den codierten Base64-String in unser _inputField einfügen (damit wir sie in den Editor kopieren können) _inputField.text = encoded;
Ja, etwas, das so kompliziert ist, erfordert nur ein paar Codezeilen. Stellen Sie sich den Horror vor, diese Daten mithilfe von XML zu speichern und zur weiteren Verwendung zurückzuholen. Alles in allem muss ich sagen, dass man mit der Byte-Datenmanipulation viele Dinge erreichen kann, und einige sind möglicherweise die Lösung, nach der Sie die ganze Zeit gesucht haben.
Ich hoffe, dass Sie dieses Tutorial nützlich gefunden haben. Danke fürs Lesen!