2010-07-16 19 views
5

In AS3 è possibile incorporare un elemento grafico in una variabile di classe:Incorpora molti elementi grafici che utilizzano una matrice

 [Embed(source="MenuAssets.swf", symbol="topSquare")] 
     public var TopMenuItem:Class; 

Ho centinaia di attività in questo progetto un sito web che sto facendo, quindi voglio incorporare le attività in una matrice per un accesso rapido.

Posso fare qualcosa di simile? Non si sta compilando quindi mi chiedo se è possibile.

 public var MenuAssets:Array = [ 
      [Embed(source="MenuAssets.swf", symbol="topSquare")], 
      [Embed(source="MenuAssets.swf", symbol="botSquare")], 
      [Embed(source="MenuAssets.swf", symbol="leftSquare")], 
      [Embed(source="MenuAssets.swf", symbol="rightSquare")], 
     ] 

risposta

4

È anche possibile incorporare le risorse in un singolo FLA. Nella libreria di FLA, assegna a ciascuno un nome di classe come "graphics.menu.RightSquare", quindi esporta come SWC. Configura il tuo progetto Flash Builder per caricare SWC come libreria esterna. Quindi puoi fare qualcosa del tipo:

import graphics.menu.*; 

new RightSquare(); 
+0

Soluzione fantastica! Grazie mille, mi hai davvero salvato da un sacco di lavoro manuale [Embed]. –

+0

Dolce, felice ha funzionato! – Casey

4

In generale, i tag di metadati in Flex si applicano a una variabile di livello di classe.

You must use the [Embed] metadata tag before a variable definition, where the variable is of type Class.

È possibile comunque fare:

[Embed(source="MenuAssets.swf", symbol="topSquare")] 
public var TopMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="leftSquare")] 
public var LeftMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="rightSquare")] 
public var RightMenuItem:Class; 

[Embed(source="MenuAssets.swf", symbol="botSquare")] 
public var BottomMenuItem:Class; 

public var menuAssets:Array = [TopMenuItem, LeftMenuItem, 
           RightMenuItem, BottomMenuItem]; 
+1

+1. Ma puoi generare automaticamente l'array, come mostrato nella mia risposta. ;) – back2dos

5

ho paura che non si può. Quello che potresti fare è il seguente:

public class Assets { 
    [Embed(source="MenuAssets.swf", symbol="topSquare")] 
    public static const TOP_SQUARE:Class; 
    //... more assets ... 
    public static function getAssets():Array { 
     var ret:Array = []; 
     for each (var s:String in describeType(Assets)[email protected]) ret.push(Assets[s]); 
     return ret; 
    } 
} 
+2

+1 È fantastico! Forse puoi prefissare tutti i nomi degli asset con una stringa univoca e filtrarli dalla costante. @ Name - nel caso in cui ci siano altre costanti dichiarate nella stessa classe. – Amarghosh

+0

@Amarghosh: buona idea. OTOH, penso che avrebbe senso separare le risorse e le costanti reali in classi separate. – back2dos

+0

Naturalmente ... :) – Amarghosh