2009-08-26 15 views
2

OK, ich fühle mich dumm, das zu fragen, aber ich habe den ganzen Nachmittag damit verbracht, es herauszufinden, ohne Erfolg.Laden eines eingebetteten Bildes in AS3

In AS3 möchte ich ein Bild zur Bibliothek hinzufügen (nennen wir es image.png) und instanziieren es nur mit Code.

gelang es mir auf diese Weise ein externes Bild

in Instanziieren
var pLoad:Loader = new Loader(); 
pLoad.load(new URLRequest("image.png")); 
addChild(pLoad); 

Aber egal was ich versucht, ich kann das gleiche Laden Sie das Bild aus der Bibliothek nicht. Wie ist das gemacht?

Nebenbei: Ich habe die [embed] -Syntax gesehen, aber im Idealfall möchte ich hartcodierte Bildnamen vermeiden, das heißt, ich möchte ein Bild auswählen und damit den Bildnamen programmatisch erzeugen.

+0

Wie laden Sie die Bibliothek? –

+0

Nicht sicher, was du meinst. Ich meine "die Bibliothek" wie in der Bibliothek-Registerkarte in der Flash-IDE. Ich denke, diese werden als Teil des SWF selbst geladen - ist das falsch? – ggambett

+0

Nein, aber Sie müssen sie anhand ihrer ID referenzieren. Haben Sie in Ihrer Bibliothek eine ID für dieses Bild angegeben? –

Antwort

0

Sieht aus wie das funktioniert:

var pDef:Class = getDefinitionByName("image.png") as Class; 
var _image:BitmapData = new pDef(10, 10); 

m_pSprite = new Sprite();   
m_pSprite.graphics.beginBitmapFill(_image); 
m_pSprite.graphics.drawRect(0, 0, _image.width, _image.height); 
m_pSprite.graphics.endFill(); 
addChild(m_pSprite) 

sieht hässlich und unnecesarily komplex, though. Irgendein anderer Weg?

+0

Sie könnten auch ein Bitmap-Objekt erstellen, es mit BitmapData füllen und dann die Bitmap als Kind des Sprites hinzufügen. –

1

Nach dem, was ich gefunden habe, ist dies in AS3 nicht so einfach wie in früheren Versionen. Eine Methode, die funktioniert hat, war, einen MovieClip zu erstellen, um das Bild aufzunehmen, dann eine Instanz dieses MovieClips zu erstellen und sie der Bühne hinzuzufügen. Die andere Methode bestand darin, für jedes hinzugefügte Bild eine Klasse zu erstellen und dann diese Klasse zu instanziieren und hinzuzufügen (die entsprechenden Schritte sind here.

Es muss bessere Möglichkeiten geben, dies zu tun. Ich werde weiter suchen

5

Nun, zuerst müssen Sie das Eigenschaftenfenster der Bibliothek öffnen und das Kontrollkästchen "Nach Actionscript exportieren" aktivieren, danach fügen Sie einfach einen netten Verweis auf Ihr Objekt in die Klassen-Textfeld ein, für dieses Beispiel I ' ll nennen es MyImage, ok. Jetzt wollen wir den Code erhalten.

var ImageClass:Class = getDefinitionByName("MyImage") as Class; 
var image:Bitmap = new Bitmap(new ImageClass(575,430)); 
addChild(image); 

das ist es, funktioniert hier gut.

+0

Dies scheint der einfachste Weg zu sein. Es ist nur eine Zeile mehr als der "alte Weg", also würde ich sagen, dass das tun wird. –

+0

Die Sache ist, ich brauche einen Sprite oder etwas, auf das ich Transformationen anwenden kann, insbesondere Skalierung und Rotation - von dem, was ich gelesen habe, machen Bitmaps das nicht. Meine eigene Antwort verwendet die gleiche Grundidee, um die Bitmap-Daten zu laden und in einen Sprite zu zeichnen, aber ich hoffe immer noch, dass es einen besseren Weg gibt. – ggambett

+0

Sie können Ihr Bitmap-Objekt immer zu einem Sprite hinzufügen und dann die gewünschten Änderungen vornehmen. – ruyadorno

3

Die Flash-Bibliothek ist ein ganz mystisches beeing, aber wenn gut verwendet wird, kann es durchaus eine nette Art und Weise zu installieren Flash-Workflows sein ... Ich werde versuchen, dies alles zu klären:

Bibliothek Symbole mit Die Option "Exportieren für ActionScript" wird tatsächlich als Klasse kompiliert. Wenn es keine Klassendatei mit demselben Klassennamen gibt, erstellt Flash bei der Kompilierung eine mit demselben Namen, den Sie im Feld "Klasse" deklarieren. Das heißt in Ihrem Fall, wenn der Name der Klasse "image.png" lautet, wird im "image" -Paket eine "png" -Klasse erzeugt, die BitmapData erweitert (natürlich wäre es weiser, ihm einen anderen Klassennamen zu geben, sagen proyect.library.MyImage) ... dies bedeutet, dass Sie nicht getDefinitionByName benötigen, instanziiert nur es wie bei jeder anderen Klasse würde:

import image.png; 
var bmd:BitmapData = new png(0,0); //the dimensions are irrelevant but necessary 

Dann benötigen Sie eine Bitmap-Instanz es hinzufügen zu können die Displaylist:

var bitmap:Bitmap = new Bitmap(bmd,"auto", true); //see the docs for the las two args 
addChild(bitmap); 
//Bitmap is a DisplayObject, so you can apply transformations to it as with any Sprite or MovieClip. 

All dies auf jede Bibliothek Symbol gilt (mit Ausnahme Grafik) ... sagen wir, Sie "Export für AS" ein Klangsymbol als „project.library.MySound“, dann können Sie dies nur tun:

import proyect.library.MySound; 
var sound:Sound = new MySound(); 
sound.start(); 

Wenn Sie mit dem gleichen Namen eine Klassendatei zu tun haben als Symbol Ihrer Bibliothek, Blitz wird versuchen, es zu verwenden (wenn es die Standard-Basisklasse erbt) . Sie werden feststellen, dass alle diese Symbole über ein editierbares Basisklassenfeld verfügen.Sie können dort auch eine benutzerdefinierte Klasse festlegen, solange sie die Standard-Basisklasse enthält ... In Bitmaps ist flash.display.BitmapData, Sounds sind Flash. media.Sound, Schriftarten sind flash.text.Font, movieclips sind flash.display.MovieClip, etc ... Im Falle von MovieClips können Sie, solange Sie keine Frames haben, auch eine Unterklasse von Sprite ableiten

Alle von thi s, mag es ein bisschen mystisch klingen, wenn es gut angewendet wird, kann für Entwickler und Entwickler, die mit Flash arbeiten, ein ziemlich komfortabler Arbeitsablauf sein. Sie können zum Beispiel einfach ein nettes Paket mit der gesamten UI-Definition erstellen und Ihre Designer dazu bringen, diese Basisklassen zum Zusammenstellen der Grafiken und Animationen zu verwenden.

+0

Wie fügen Sie den Typ Grafik zur Anzeigeliste hinzu? – NappingRabbit

2

Eine Verbesserung ruyadorno Weg, wenn Sie bereits wissen, was der Klassenname ist, ist einfach:

var image:Bitmap = new Bitmap(new MyImage(0, 0)); 
addChild(image); 

Bitmaps können leicht genug, um in Sprites gestellt werden: Sie können

var image:Bitmap = new Bitmap(new MyImage(0, 0)); 
var sprite:Sprite = new Sprite; 
sprite.addChild(image); 
addChild(sprite); 

Dann ist die Transformation sprite wie normal.

n.b. Die Parameter für MyImage sind Breite und Höhe, aber sie sind dummy für Unterklassen, Sie können alles übergeben.

+0

Gut gepunktete chris, danke! – ruyadorno

Verwandte Themen