2012-05-25 9 views
6

Ho iniziato a creare un framework di gioco in Flash Professional e sono curioso di sapere come posso creare oggetti nella libreria Flash che sono in grado di trascinare sul palco e assegnare proprietà accessibili da AS3.Come è possibile assegnare alle istanze flash stage proprietà univoche in Flash Professional per passare allo script AS3?

Esempio:
voglio creare un oggetto di commutazione (ad esempio un interruttore della luce), in modo che quando i interactes giocatore con esso, si innesca qualcosa di specifico nel codice come una luce nella stanza si accende.

Capisco che Flash abbia incorporato componenti dell'interfaccia utente che è possibile definire proprietà all'interno dell'ambiente Flash Professional (vedere l'immagine sotto), e mi chiedo se c'è un modo per creare i miei componenti di stile personalizzati in modo da poter essenzialmente avere il mio file di livello aperto in flash (.fla) e quindi trascinare un componente switch dalla mia libreria e digitare alcune informazioni quali la luce che sta controllando e qualsiasi altra informazione che desidero.

flash component parameters

(sopra è un esempio del tipo di controllo dei parametri che sto cercando)

ho letto un po 'di estendere la classe Flash UIComponent ma sento che questo non è il diritto approccio perché è eccessivo per quello che voglio. Tutto quello che voglio è passare alcuni parametri di base da un'istanza di stage di libreria in AS3. Non voglio passare dati tramite il nome dell'istanza perché questo sembra molto disordinato se voglio avere un'interazione più complessa.

Grazie!

+1

IS [questo] (http://www.adobe.com/devnet/flash/learning_guide/components/part03.html) quello che stai cercando? –

+0

sì! Sto cercando qualcosa di simile. Sfortunatamente quell'articolo non spiega realmente come il componente possa funzionare con AS3. Ad esempio, come posso accedere a quei parametri da AS3, che tipo di classe deve essere usato? ecc. L'articolo dice che è possibile, ma in realtà non fa luce sui dettagli. C'è un collegamento a un tutorial sull'estensione di un UIComponent, ma sono interessato solo a creare i miei componenti di base non relativi all'interfaccia utente. – justinl

+0

L'editing da Flash IDE renderà il gioco disordinato, perché non crei istanze nel file as3 e usi JSON per stanze dinamiche. Puoi persino creare editor di livello, ma il livello di modifica con flash ide non è il modo in cui dovresti incantarti. – ymutlu

risposta

0

I thik ciò che le persone stanno cercando di dire è che si può avere tutto guidato dai dati, e quindi è possibile combinare l'IDE con i dati per arrivare al gioco finale.

Ma considera questo ... potrebbe essere quello che vuoi.

Se avete, per esempio, una classe di BaseSwitch:

public Class BaseSwitch extends MovieClip { 
    private var _lightName:String; 
    private var _light:Light; 
    public function get lightName():String { 
     return lightName; 
    } 
    pubic function set lightName(value:String):void { 
     if (value != _lightName) { 
     _lightnName = value; 
     //Note I don't advocate having children reach into their parents like this, 
     //but you sound like you don't want the parent involved in the process, so 
     //this is one way you could do it. 
     if (parent.hasOwnProperty(lightName) && parent[lightName] is Light) { 
      _light = parent[lightName]; 
     } else { 
      trace('Could not find light', _lightName); 
     } 

     } 
    } 
    //other code to listen for gestures and operate the light 
} 

Ora, quando si desidera un interruttore per accendere un nome luce specifica, creare un'istanza libreria e impostare sua classe di base a BaseSwitch. Quando chiudi la finestra di dialogo in cui imposti la classe base, noterai che ti dà un dialogo sul fatto che non riesce a trovare la classe nel percorso della classe e ne verrà generata una. Lo sostituirai con una classe che imposta lightName. Creare una nuova classe AS3 nella directory radice con lo stesso nome dell'istanza della libreria. Esso dovrebbe essere simile a questo:

public class SpecificSwitch { 
    public function SpecificSwitch() { 
     super(); 
     lightName = 'theSwitch'; 
    } 
} 

Altre scelte possibili coinvolgono avere il match classe genitore fino istanze di switch con le istanze di luce in base al nome, quindi se si trova un light1 e light1Switch, neanche dà un riferimento alla luce dell'interruttore o semplicemente imposta una mappatura nel proprio sistema di ascolto degli eventi.

0

Vorrei creare un clip filmato "switch" ed esportarlo in actioncrip, lo stesso con un clip filmato "leggero". Nel file della classe principale .as li inserirò nello stage, utilizzando addChild (clip) e quindi aggiungerò un click listener al clip movie "switch" per controllare la "luce".

0

Questo può essere fatto facilmente.

I componenti sono un approccio errato a mio parere.

In primo luogo si desidera impostare il collegamento Actionscript/etichettare la voce della libreria. Nel pannello Libreria. - Fare clic con il tasto destro su "yourMC" >> fare clic su "Proprietà". - Nella finestra di dialogo Proprietà selezionare "Esporta per script azione" - Quindi denominare la classe es. "YourMC_Class"

ora MC è pronto per essere referenziato nel codice.

Successivamente si vorrebbe aggiungere dinamicamente il "tuoMC" dalla libreria allo stadio. che può essere fatto come tale.

// prima biblioteca di riferimento oggetto

var yourMC_ref:yourMC_Class = new yourMC_Class(); 

// Quindi caricare voce mc dinamica in var

var your_MC_OBJ = yourMC_ref; 

// quindi aggiungere il MC di mettere in scena.

this.addChild(your_MC_OBJ); 
your_MC_OBJ.x = 200; 
your_MC_OBJ.y = 100; 

In poche parole è così che aggiungo gli elementi della libreria allo stage.

Ovviamente questa è la funzione/codice di base.

In un progetto avrei tutto il codice in una classe esterna, nel qual caso si sarebbe solo impostare Vars come pubblica vars

public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

e le ultime 3 righe di codice in una funzione pubblica

public function ADD_First_MC() 
{ 
     this.addChild(your_MC_OBJ); 
     your_MC_OBJ.x = 200; 
     your_MC_OBJ.y = 100; 
} 

Ora 'your_MC_OBJ' può essere utilizzato in modi più complessi.

es. per creare un interruttore della luce ci sono molte opzioni a seconda di come è necessario appropriarsi della funzionalità. es. Applicare un altro elemento della libreria MC su "your_MC_OBJ" riprodurre un frame specifico all'interno di MC.

Tuttavia, se si trattasse di me, utilizzare la funzione mouse per accendere o spegnere la luce utilizzando addChild removeChild. es.

public var LightON = 0; 
public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

quindi creare una funzione pubblica che gestisce on/off eventi

public function LightON_OFF() 
    { 
     if(LightON == 1) 
      { 
       this.addChild(your_MC_OBJ); 
       your_MC_OBJ.x = 200; 
       your_MC_OBJ.y = 100; 
      } 
     if(LightON == 0) 
      { 
       this.removeChild(your_MC_OBJ); 
      } 
    } 

Spero che questo aiuti.

0

Quindi, per quello che vuoi, mentre potrebbe non essere il modo migliore per fare ciò che vuoi, capisco che è la tua esperienza che stai costruendo.

Utilizzare componenti, sì ...nel seguente modo (il più semplice):

  • Creare un clip filmato
  • tasto destro del mouse nella biblioteca
  • Fare clic su "definizioni dei componenti"
  • aggiungere una proprietà, impostare un nome, un nome di variabile (var test, per questa materia) e un valore predefinito
  • Fare clic su OK

  • Aprire il clip filmato

  • 0.123.
  • Aprire il codice per il primo frame e dichiarare la variabile senza un valore iniziale (var test: String;)
  • Tracciare il valore (traccia (test);)

  • Torna alla radice fase

  • Trascinare e rilasciare l'elemento dalla libreria di mettere in scena
  • prova di esso (Cmd/Ctrl + Invio) (forse stamperà nulla, so perché, ignora il valore di default a volte)

  • selezionare il componente sul palco

  • aprire il pannello proprietà (Finestra> proprietà)
  • Vai I parametri dei componenti di questo pannello e modificare il valore della proprietà

  • si dovrebbe vedere il valore tracciato sulla console

E, penso, in questo modo è possibile utilizzare oggetti di componenti per ciò che si vuole, come l'utilizzo di una stringa e ottenere il mc controllato con il suo nome.

Buona fortuna