Accueil > Code > La métadonnée Embed en AS3

La métadonnée Embed en AS3

Il y a peu, le monde merveilleux de l’ActionScript 3 s’est ouvert à moi. Même si certaines choses sont un peu déroutantes, ayant parcouru un très long chemin en AS2 (raah, l’absence de constructeurs private/protected! Enfoirés de l’ECMA, laissez tomber cet héritage par prototype à la con!), certaines des nouvelles fonctionnalités tuent carrément.

Un truc qui m’avait toujours gonflé en AS2, c’est la liaison entre les assets et le code. Je codais sous Eclipse en compilant avec MTASC, et je modifiais mes assets sous Flash. Seulement, histoire de pouvoir les associer à une classe, je devais, au choix, mettre ma classe sous Flash (et me taper une compilation AS par Flash d’environs 30 minutes), ou faire une grosse méthode bourrine à coup de Object.registerClass.

C’était, avouons-le, pas super beau. Mais désormais, en AS3, les gens d’Adobe ont rajoutés des métadonnées merveilleuses qui permettent de faire ça tout seul, et bien plus encore.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package {
	import flash.display.Sprite;
	import flash.display.Bitmap;
	public class EmbedTest extends Sprite
	{
		[Embed(source="assets/test.png")]
		public var Test : Class;
		public function EmbedTest()
		{
			var test : Bitmap = new Test();
			this.addChild(test);
		}
	}
}

C’est pas merveilleux ? Encore plus fort :

1
2
3
4
5
6
7
8
9
10
package {
	import flash.display.Sprite;
	[Embed(source="assets/test.swf", symbol="test")]
	public class EmbedTest extends Sprite
	{
		public function EmbedTest()
		{
		}
	}
}

Et hop, mon symbol « test » contenu dans mon fichier « assets/test.swf » est lié à ma classe EmbedTest, et quand je fais un new EmbedTest(), ça marche. Trop beau.

Ne nous arrêtons pas en si bon chemin :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package {
	import flash.text.TextFieldAutoSize;
	import flash.text.TextField;
	import flash.display.Sprite;
	import flash.text.TextFormat;
	import flash.text.AntiAliasType;
	public class EmbedFont extends Sprite
	{
		[Embed(source="assets/parchm.ttf", fontFamily="foo")]
		public var bar : String;
		public function EmbedFont()
		{
			var format : TextFormat = new TextFormat();
			format.font = "foo";
			format.color = 0xFFFFFF;
			format.size = 130;
			var label : TextField = new TextField();
			label.embedFonts = true;
			label.autoSize = TextFieldAutoSize.LEFT;
			label.antiAliasType = AntiAliasType.ADVANCED;
			label.defaultTextFormat = format;
			label.text = "Hello World!";
			this.addChild(label);
		}
	}
}

Fini la galère pour gérer ses polices. Elle est pas belle, la vie? Allez, salut.

Categories: Code Tags: , ,
  1. tomato
    17/02/2009 à 10:41 | #1

    Hello,

    Bizarre… j’utilise ton code d’insertion d’une image…
    et j’ai une erreur :
    TypeError: Error #1007: Instantiation attempted on a non-constructor.

    Oiiiiiiinnnnn…
    Tu as une idée ?

    Tomato :o )

  2. 17/02/2009 à 14:30 | #2

    @tomato

    Hm, là comme ça… Il manquait un import pour la classe Bitmap, mais rien qui justifie ton erreur. Envoie ton code :)

  3. 18/05/2009 à 02:17 | #3

    J’essaye plein de trucs sans résultat mais cela ne marche t-il pas que pour la CS4 ?

  1. Pas encore de trackbacks