AS3 Einbetten Bilder Klasse und dann diese Bilder in eine andere Klasse?
Zum Beispiel, jetzt habe ich eine Klasse namens "Bälle.". Hier lade ich 10 verschiedene Kugeln-Bilder. Sie wissen, wie diese:
[Embed(source = "/ball1.png")]
[Embed(source = "/ball2.png")]
Das problem ist, dass wenn ich spawn 5 Kugeln, diese Kugeln Bilder gonna get embeded 5 * 5 mal rechts? Korrigieren Sie mich, wenn ich falsch bin! So dachte ich, kann ich eine ballimageloading Klasse? Lädt diese Bilder, die einmal, und dann in die Kugeln.wie kann ich laden was auch immer ball ich will für den Augenblick?
InformationsquelleAutor user1941346 | 2013-01-27
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die beste Methode, um eine
Assets
- Klasse enthält statische eingebettete Bilder, wie dieses:Dann alles, was Sie tun müssen ist, deklarieren Sie eine variable für Ihren geladenen
Bitmap
und es verwenden, etwa so:Dadurch wird eine
Bitmap
Instanz des geladenen Bildes, und Sie können dann fügen Sie Sie der Liste anzeigen. Das laden wird nur einmal pro Bild, und Sie haben alle Ihre Bilder an Ihren Fingerspitzen, zugänglich von jeder Klasse, die Sie haben.InformationsquelleAutor Gio
Brauchen Sie sich nicht zu "laden", in den Sie eingebettet sind. Sie müssen nur zum erstellen der Bilder. Es ist eine gute Idee zu haben, eine Klasse, die Verwaltung freigegebener Ressourcen, die als solche:
Dann rufen Sie
TextureAssets.init()
einmal (in der Hauptsache.so als Beispiel)und wenn Sie Sie brauchen, die bitmapData: verwenden Sie
new Bitmap(TextureAssets.ball1Texture)
Diese Weise Ihr Programm muss verwendet nur Speicher für ein bitmapData-anstatt viele, die im Endeffekt das gleiche.
Wenn Sie benötigen, um Operationen auf ein bitmapData, während die ursprüngliche, die Sie verwenden können:
Auch, wenn Sie instanziieren alle Bälle, die Bilder in eine Klasse, es ist eine gute Idee, um die drop-statischen Zugriff und stattdessen initialisieren der bitmapDatas im Konstruktor, erstellen Sie eine neue TextureAssets() und rufen Sie die Texturen durch die variable
(Statisches Feld Zugriff ist langsamer als die direkte (.) Zugang : http://jacksondunstan.com/articles/1690)
Der wichtigste Punkt ist immer die bitmapData gebaut werden, wenn das gleiche Bild wird geteilt werden und unverändert bleiben. Ihre obige code erstellt ein neues bitmapData-Objekt für jeden Aufruf von 'var mBall1:Bitmap = new Assets.BallImage1() as Bitmap;', die führen würde, um Speicherlecks, wenn user1941346 nicht nennen mBall1.bitmapData.dispose() vor dem entfernen aus der Anzeigeliste oder Verlust der Referenz. Zusätzlich zu den Kosten für den Bau eines neuen bitmapData-jedes mal, für eine 100 Aufrufe gibt es einen Unterschied von ca. 500 kb für eine kleine 64x64-png, im Gegensatz zu ca 100 kb für die oben genannten Methode.
Okay.. ich könnte falsch sein, aber anrufen Klon-Methode erstellt eine neue
BitmapData
- Objekt und gibt es zurück (zumindest ist das, was die docs sagen). help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/...Ich gab der Klon Beispiel nur, wenn es eine Notwendigkeit, um "ändern Sie die bitmapData" (wie Farbe, Transformationen oder filter), um die Erhaltung der Originale.
InformationsquelleAutor chadiik