Flash Components

HOME arrow TUTORIALS arrow Sintassi arrow AttachMovie e addChild dalla Timeline
AttachMovie e addChild dalla Timeline Stampa E-mail
Scritto da Flep   
Friday 20 July 2007

Ciauz ! Ecco un altro articolo dedicato ai meno esperti.
Poco esperti ma con tanta vogliadi imparare.
Dopo aver visto come usare l' ex metodo attachMovie dalle classi in vari modi ( anche al posto di DuplicateMovieClip rimosso ) mi sono arrivati molti messaggi vostri dicendo che era troppo difficile e che molti di voi avevano problemi a migrare ad Actionscript 3.0 .

Seguite questo articolo perchè in poche righe di codice vi spiego molto facilmente come attaccare una MovieClip dalla libreria di Flash CS3 al suo Stage e come fare a comunicare con lei.

Entriamo nel vivo ...

Leggi tutto

Trackback(0)
Commenti (6)Add Comment
...
scritto da marcel, July 20, 2007
Ciao a tutti,
ringrazio il curatore di questo sito. Buon lavoro, vedo che stai facendo molto.

Il sistema basilare per l'inserimento di un oggetto dalla libreria in AS3 e il vecchio attachMovie di AS2 sono veramente molto simili.
Riprendo l'oggetto "Clip" (che in libreria si chiama mc_clip) dell'esempio fatto da Flep.
Non c'è necessariamente bisogno di creare una classe (package) col nome Clip, anche se bisogna abituarsi a farlo visto che in un metodo avanzato di programmazione la creazione di script esterni ci fa espandere il lavoro dei metodi e degli oggetti; quello che però mi pare fondamentale da dire è:

col tasto destro sull'oggetto della libreria si sceglie la voce Linkage (in italiano mi sembra "concatenamento"), aprendo così il pannello delle proprietà linkage. Ciò che in Asctionscript2 continuava a chiamarsi appunto "linkage ID" (in cui indicare il nome identificativo dell'oggetto, ossia il richiamo dalla libreria di quell'oggetto attraverso actionscript) ora si chiama Class.
E' davvero tutta qui la differenza!
Silenziosamente questa è una variazione enorme, sia chiaro: stiamo parlando infatti di generazione di classi.
Indicando una classe in questo modo, Flash CREA UNA VERA E PROPRIA CLASSE (anche in assenza di un file .as creato appositamente) per quell'oggetto di libreria, e solo per quello.
Di conseguenza, e per concludere sperando di non aver fatto più confusione di prima, ecco come potremmo portare sullo stage il nostro oggetto dalla libreria (posto che sia stata definita la classe Clip nel pannello Linkage!!!):

Nel frame scriviamo:

addChild(new Clip()).name = "myClip";

dobbiamo ovviamente assegnare un nome a questo oggetto chiamato sullo stage, ovvero all'istanza dell'oggetto di libreria.
Come potete vedere, addChild è in grado di definire un nome per l'oggetto aggiunto, che può essere in sostanza creato direttamente all'interno del richiamo addChild.
la nostra istanza ora si chiama myClip e velocemente vi mostro come modificarne le proprietà:

getChildByName("myClip").x = 100;
getChildByName("myClip").y = 100;


Ecco, mi sembra in fondo una soluzione molto semplice per continuare il lavoro di attachMovie.

Saluti.
...
scritto da Flep, July 20, 2007
Grande Marcel !
Grandissima ed efficace spiegazione al tua !
istanziare dinamicamente
scritto da Peppe scienza, July 22, 2007
Ciao,
con AS 2.0 ero solito fare una cosa del genere:

var clipNum:Number=Math.round (Math.random()*10);
clipContenitore,attachMovie("clip", "clip_" clipNum);

in modo che, avendo 10 clip linkate come
clip_0, clip_1, clip_2 ... clip_10
ruscivo a istanzia n movieClp attraverso na stringa contenente il suo ID del linkage.

Se adesso vorrei riusire a fare una cosa del genere, cosa dovrei fare?
Uno switch che in base alla variabile random (o altrmenti determinata in runtime) istanzia una classe diversa con new clip_0 mi sembra un passo indietro.
...
scritto da Flep, July 22, 2007
Ciao,
Se nel campo Class di ogni MovieClip che hai in libreria inserisci il rispettivo nome delle clip: clip_0, clip_1, clip_2 ...
Flash non ti permette di istanziare una MovieClip con una sintassi di concatenazione come in questo modo:
addChild(new "clip_" clipNum());

Devi crearti un Array e fare in questo modo:
var array:Array=new Array(clip_0,clip_1,clip_2);
var clipNum:Number=Math.round (Math.random()*2);
addChild(new array[clipNum]());

PS: forse se scrivessimo sul forum riusciremmo a scrivere meglio il codice smilies/cry.gif questo editor si mangia il segno matematico più quando lo scrivo

Mi hai dato un ottimo spunto per l' articolo di domani smilies/cheesy.gif
...
scritto da Peppe scienza, July 22, 2007
Il mio problema è che quando si ha un grosso numero di clip in libreria e scrivere tutto in un array diventa lungo, noioso e ricco di errori di battitura.
Poichè la pigrizia aguzza l'ingegno, alla fine quarda cosa ho trovato:

var clipNum:Number=Math.round (Math.random()*10);
var currentClipClass:Class=getDefinitionByName("clip_" clipNum) as Class; // "clip_" più clipNum
clip=new currentClipClass();

...
scritto da Flep, July 23, 2007
Bene ! Hai individuato un altro metodo smilies/smiley.gif
L' unica cosa che mi da dubbi, è che come hai accennato, se hai grosse quantità di MovieClip a mio parere ( dato dall' esperienza in partecipazioni di sviluppo di grosse applicazioni ) se non hai degli arrays in cui tieni traccia perfettamente di ogni oggetto avrai qualche problema.

Scrivi commento
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
smaller | bigger

busy
Ultimo aggiornamento ( Thursday 20 September 2007 )
< Prec.   Pros. >

Flashmint flash templates

FlippingBook page flip engine - flash books for web designers

Flash Media Server Hosting

hire a Flash professional

FlashDen stock

Flash Animation

Flash Components

Flash Components

Flash Components

Flash Components

Flash audio

Get custom programming done at GetACoder.com!