333 messaggi dal 06 agosto 2003
Dopo neanche un mese che sono dietro a studiare Flash, dico che è troppo complesso!
Non ci capisco più nulla...
Sto tentando di fare una pagina flash che prenda dei dati da un DB... ho seguito un tutorial e almeno qui sono riuscito a combinare qualcosa: genero dinamicamente un file XML tramite ASP e recupero i dati su Flash... fin qui nessun problema...
Ovviamente i dati sono in numero variabile, questo significa che devo creare dinamicamente gli oggetti su Flash, ovvero, se trovo 5 record, devo generare 5 bottoni...

Come Diavolo si fa?!?!?!?!
ho provato a fare una cosa del genere:

var Bottone = new Button;

ho provato a settare alcune proprietà quali _visible e label... cosa è successo assolutamente nulla... stò dannato bottone non compare...
Inizio ad avere dei dubbi sulla praticità di Flash... mi sta facendo perdere un sacco di tempo...

Seguendo anche dei tutorial, dopo un pò mi pianto... soprattutto perchè non trovo dei componenti o delle funzioni...

Ho davvero bisogno di una Vacanza...

Conosco la metà di voi soltanto a metà e nutro per meno della metà di voi metà dell'affetto che meritate...

Bilbo Baggins
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
ti conviene creare una movieclip con tutti i controlli necessari dentro.
Metodo 1:
piazzala direttamente nello stage e fai in modo che sia invisibile (onClipEvent(load) this._visible=false). Quando vai a leggere l'xml, per ogni dato chiama .duplicateMovieClip() in modo che ti vengano create tante istanze uguali alla prima. Appena crei la nuova movieclip, ricordati di ridargli la visibilità e di posizionarla oppurtamente nello stage.
Metodo 2:
piazza la movieclip-template nella libreria e dagli un nome per il linkaggio. Con attachMovie crea una nuova istanza della movieclip. Anche qui ricordati di posizionarla nello stage.

Avvertenza:
in entrambi i modi, aver posizionato la movieclip non vuol dire che sia stata caricata del tutto quindi non tentare di accedere ai controlli al suo interno. Dovresti invece scrivere delle variabili e lasciare che sia la movieclip stessa a copiarsi i valori usando uno script dentro onClipEvent(load).


Inizio ad avere dei dubbi sulla praticità di Flash... mi sta facendo perdere un sacco di tempo...

flash è uno strumento molto potente, anche se non troppo performante in certi casi. Che ti fa perdere tempo è vero, fare il debug di certe operazioni è un inferno e non tutte le sottigliezze sono documentate. Comincia con cose semplici, non può neanche ipotizzare di essere un master di flash dopo solo 1 mese. Io ho cominciato con flash4, quattro anni fa e alle volte ancora mi piglia il nervoso perchè non sempre riesco a capire subito dove sta il problema.

Enjoy learning and just keep making
333 messaggi dal 06 agosto 2003
No, no,...
Sicuramente non posso dire di essere un un master di flash...
Il problema è che ogni volta che imparavo a sviluppare applicazioni e altro ancora con strumenti e linguaggi diversi, in breve tempo non diventavo un master, ma capivo la fisionomia dello strumento (sapevo dove mettere il codice, quando servirmi del codice e quindi come utilizzarlo... )... qui non riesco ad arrivarci... mi sembra che Flash faccia del codice un caos assurdo...

Ho visto esempi che predispongono un solo fotogramma con del codice: con questi pochi elementi fanno animazioni che durano nel tempo...

Mi sembra un bel casino... comunque, per il momento non abbandono... vediamo se ci arriverò prima o poi...

Ora provo la tua soluzione...

Grazie

Conosco la metà di voi soltanto a metà e nutro per meno della metà di voi metà dell'affetto che meritate...

Bilbo Baggins
333 messaggi dal 06 agosto 2003
Ok... i dati vengono caricati senza problemi:

dimmi di più sulla MovieClip (Metodo 1):

Mi stai dicendo che per ogni "riga" di dato che ricevo, devo immettere:

<Bottone>.duplicateMovieClip()

E' corretto?
In questo modo come faccio a dirgli che alla pressione di quel bottone deve fare un getURL() ?

Abbi pazienza... ti scongiuro...

Grazie

Conosco la metà di voi soltanto a metà e nutro per meno della metà di voi metà dell'affetto che meritate...

Bilbo Baggins
333 messaggi dal 06 agosto 2003
No, aspetta: mi correggo... duplicateMovieClip() va utilizzato così:

duplicateMovieClip(<Nome MovieClip>,"NuovoNome",this.getNextHighestDepth());
NuovoNome.loadMovie("Image1.jpg");
NuovoNome._visible = true;

Giusto?

Ho però 2 problemi:
Il NuovoNome non deve essere sempre diverso? Come faccio?

Provando semplicemente così, non mi visualizza nulla... (sto provando a mostrare tanti MovieClip quanti sono i "record")
Modificato da Tauren il 16 agosto 2004 14.30 -

Conosco la metà di voi soltanto a metà e nutro per meno della metà di voi metà dell'affetto che meritate...

Bilbo Baggins
11.886 messaggi dal 09 febbraio 2002
Contributi
aspetta, cerca prima di comprendere la logica, poi vadi sul codice.

Sempre a causa delle difficoltà di debug, con flash dovresti sempre fare un esempio semplice semplice per verificare che hai capito e che stai applicando bene la tecnica. Questo ti serve anche come esercizio sul campo. POI applichi quanto appreso al progetto primario.

Quindi, apri un nuovo fla ed esercitati su quello.

Tu hai una collezione di elementi. Per ogni elemento della collezione devi creare un "qualcosa" che rifletta e ti permetta di operare sull'elemento stesso.
Immagina che la mia collezione sia composta da nomi in un array. Esempio:

var nomi = ["pippo", "pluto", "paperino"]

e voglio realizzare un elenco in cui ogni riga è composta da una texbox affiancata da un bottone.
Il testo sottolineato descrive il tuo template. Quindi, immediatamente, crea nel tuo fla vuoto una movieclip che contiene una textbox (dagli un nome per l'istanza) e un bottone. Dai un'istanza a questa movieclip appena creata (es. "template").

Ora il tuo filmato è composto da una movieclip "template" che si trova nella _root. Voglio che dinamicamente, questa movieclip sia ripetuta per ogni elemento della collezione. Metti questo codice nel primo frame della timeline della _root.


for (i=0; i<nomi.length; i++){
//qui duplico la movieclip template
//nota come uso l'indice i per generare
//nomi univoci per le nuove mc
_root.template.duplicateMovieClip("template"+i, this.getNextHighestDepth())
nuovamc = eval("template"+i)
//sposto la movieclip in modo che non siano
//tutte una sopra l'altra
nuovamc._x = 10
nuovamc._y = i*50
//ora valorizzo la textbox nella movieclip
//con il nome nella mia collezione
nuovamc.nometextbox.text = nomi[i]
}

finito.
la parte in grassetto è quella che "personalizza" la movieclip template con i dati dell'elemento.
Ti ripeto che questa operazione potrebbe non funzionare perchè aver duplicato la movieclip non vuol dire necessariamente che la textbox al suo interno di stata già duplicata anch'essa. Comunque, la logica dello script non è sbagliata. Fai qualche prova con questo poi vai al passaggio successivo.
ciao

Enjoy learning and just keep making
333 messaggi dal 06 agosto 2003
Ok: ci sono: funziona: MIRACOLO!!!

a questo punto riesco a duplicare il mondo...
Ora devo fare 2 cose:

1) Al click di un MovieClip devo mandarlo ad una certa pagina (tieni conto che tutti i bottoni portano alla stessa pagina, la cosa che cambia è un parametro nella querystring...)

2) Facoltativa: come faccio a mettere un'animazione sul MovieClip?
In pratica dovendo essere un bottone vorrei fare qualche storia OnMouseOver (o rollOver, vedila come ti pare...): immagino sia possibile...

Esisterebbe una 3° storia... ma te ne parlerò se riuscirò a risolvere i 2 punti precedenti...

Grazie

Alcuni PC non possiedono Internet, questo significa che x far girare Flash hanno bisogno del plugin... il sito della Macromedia non ti fa "scaricare" il file nella posizione che vuoi, te lo installa e basta... dove posso trovare il Plugin?
Modificato da Tauren il 17 agosto 2004 11.02 -

Conosco la metà di voi soltanto a metà e nutro per meno della metà di voi metà dell'affetto che meritate...

Bilbo Baggins
11.886 messaggi dal 09 febbraio 2002
Contributi

Ok: ci sono: funziona: MIRACOLO!!!

bene!


1) Al click di un MovieClip devo mandarlo ad una certa pagina (tieni conto che tutti i bottoni portano alla stessa pagina, la cosa che cambia è un parametro nella querystring...)


Allora, nella movieclip duplicata devi posizionarci un bottone. Creare un bottone è semplice: ti basta disegnare una forma (o scrivere del testo) e poi fare Converti in simbolo -> Bottone.
Ora hai questo nuovo simbolo che per sua natura risponde agli effetti di mouseover e mouseout. Selezionalo e fai "modifica in posizione". Dentro ci troverai 4 frame che hanno un loro significato:
1) il primo è come appare il bottone in stato di "riposo" (ad esempio, se è un testo fallo nero)
2) il secondo è come appare il bottone quando ci passi sopra col mouse (es. fallo giallo)
3) il terzo è come appare il bottone quando premi e tieni premuto il mouse su di esso (es. fallo rosso)
4) il quarto è l'area sensibile del bottone. Questo ultimo è molto importante specie quando i bottoni sono delle scritte. Il bottone ha una forma variabile e sarebbe cliccabile solo quando passi sopra una lettera e non quando il cursore è tra una lettera e l'altra. In questo quarto frame dovresti disegnare un rettangolo pieno che circondi tutta la scritta.
Questo comportamento è utile se ad esempio vuoi creare delle aree sensibili senza che lo sfondo (magari jpg) venga coperto. Basta che in 1,2,3 non metti niente e che in 4 metti una forma vettoriale per far comunque rispondere il bottone agli eventi.

Ora, una volta definito questo bottone, apri le SUE azioni. Scrivici:
on(release){
getURL("pagina.asp?id="+idElemento, "_blank")
}

ogni qualvolta si cliccherà su quel bottone, verrà aperta una nuova finestra del browser con indirizzo pagina.asp?id=XXX

Per personalizzare ogni bottone contenuto nelle varie movieclip duplicate, usa una variabile idElemento.
Dovrai valorizzare questa variabile subito dopo aver duplicato la movieclip. Riprendendo l'esempio di ieri, dovresti fare:


for (i=0; i<nomi.length; i++){
//qui duplico la movieclip template
//nota come uso l'indice i per generare
//nomi univoci per le nuove mc
_root.template.duplicateMovieClip("template"+i, this.getNextHighestDepth())
nuovamc = eval("template"+i)
//sposto la movieclip in modo che non siano
//tutte una sopra l'altra
nuovamc._x = 10
nuovamc._y = i*50
//ora valorizzo la variabile idElemento
//con l'id dell'elemento
nuovamc.idElemento = nomi[i]
}

ricorda che le variabili personalizzate come idElemento possono essere viste come proprietà della movieclip in cui si trovano.


2) Facoltativa: come faccio a mettere un'animazione sul MovieClip?
In pratica dovendo essere un bottone vorrei fare qualche storia OnMouseOver (o rollOver, vedila come ti pare...): immagino sia possibile...

già risposto: puoi farlo dopo aver creato il bottone.
Se vuoi degli effetti aggiuntivi... che so... lo sfondo che si muove o comunque qualcosa che si sposta indipendentemente dalle azioni dell'utente, puoi sempre creare un nuovo livello all'interno della movieclip da duplicare e posizionarci altre movieclip o gif animate, ecc...

ciao

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.