Flash: galleria immagini senza XML

Di: nannopoli | 26/09/2020 18:49:14
Ciao a tutti.
Volevo sapere se era possibile creare una funzione che dica che se l'immagine dichiarata su loadmovie non è presente, il pulsante per scorrere i frame si disattivi.
Cerco di spiegarmi meglio:
Ho creato un movie che carica immagini esterne in ogni frame. Per scorrerle ho inserito due tasti con funzione "next frame " e "previous frame". Ora, siccome è prevedibile che vengano aggiunte foto nei tempi a seguire, dovrei riuscire a creare qualcosa che mi permetta di non dover rimettere le mani sul .fla tutte le volte. Ovviamente io inserirei già i frame per un determinato numero di foto e vorrei che se non presenti, il tasto "next frame" smettesse di funzionare come se fosse arrivato all'ultimo.
So che l'idea migliore sarebbe creare magari un xml oppure un ciclo, ma non so assolutamente niente di actionscript e non sono capace di creare codici del genere.
Grazie.

Risposte



Ciao Nannopoli,
la soluzione migliore sarebbe senza dubbio un XML generato dinamicamente dal Server in base alle effettive immagini presenti in una cartella.
Una soluzione alternativa c’è, ma non si tratta di disabilitare il pulsante (visto che Flash non sa se un’immagine esiste oppure no); si tratta di gestire l’errore che si verifica quando cerchi di caricare un’immagine che non esiste.
Abbiamo comunque dei limiti:
Non possiamo comunicare a Flash i nomi delle immagini, quindi lo script che trovi qui sotto funzionerà solo se le immagini si chiamano 1.jpg, 2.jpg, 3.jpg, ecc.
Se proveremo a caricare un’immagine che non esiste il filmato ovvierà al problema ricaricando l’ultima immagine disponibile, ma non disabilitiamo davvero il pulsante.
Prima di provare lo script devi posizionare 3 elementi sullo Stage, io li ho chiamati così:
- holder
Il movieclip che serve da contenitore per le immagini.
- prevBtn
Il pulsante per andare indietro
- nextBtn
Il pulsante per andare avanti
Dopo di che inserisci questo script nel fotogramma:
[HR]
var myImage:Number = 1;
var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();
loadListener.onLoadError = function() {
myImage -= incr;
mcLoader.loadClip(myImage+".jpg", holder);
};
mcLoader.addListener(loadListener);
function loadImage() {
myImage += incr;
mcLoader.loadClip(myImage+".jpg", holder);
}
var incr:Number = 0;
loadImage();
prevBtn.onPress = function() {
incr = -1;
loadImage();
};
nextBtn.onPress = function() {
incr = 1;
loadImage();
};
[HR]
Naturalmente quando provi il filmato vedi gli errori segnalati ogni volta che un’immagine non viene trovata, ma quando pubblicherai sul web i messaggi di errore spariranno.

Di: Professore | 26/09/2020 18:49:14


per me sarebbe perfetto anche così, però a questo punto ho un problema:
sullo stage ci sono tre pulsanti che richiamano la propria gallery, quindi se non posso dirgli quali sono le immagini di quella determinata gallery, come faccio a far funzionare lo script anche per le altre due? (nel senso che se le immagini si chiamano 1.jpg, 2.jpg etc..) anche quelle delle altre due gallery si dovrebbero chiamare uguali ma ovviamente non possono convivere con il solito nome.

Di: nannopoli | 26/09/2020 18:50:14


Non ci confondiamo per così poco...
Aggiungi i tuoi tre pulsanti per le tre gallerie e chiamali così:
- gal1
- gal2
- gal3
Rinomina le tue immagini in questo modo:
1_1.jpg, 1_2.jpg, 1_3.jpg, 1_4.jpg, 2_1.jpg, 3_1.jpg
Dove il primo numero rappresenta la galleria (da uno a tre) e il secondo numero rappresenta il progressivo dell’immagine (da uno a quanto vuoi tu, senza interruzioni).
Sostituisci lo script di prima con questo:
[HR]
var mcLoader:MovieClipLoader = new MovieClipLoader();
var loadListener:Object = new Object();
loadListener.onLoadError = function() {
myImage -= incr;
mcLoader.loadClip(myGallery+"_"+myImage+".jpg", holder);
};
mcLoader.addListener(loadListener);
function loadImage() {
myImage += incr;
mcLoader.loadClip(myGallery+"_"+myImage+".jpg", holder);
}
var myImage:Number = 1;
var myGallery:Number = 1;
var incr:Number = 0;
loadImage();
prevBtn.onPress = function() {
incr = -1;
loadImage();
};
nextBtn.onPress = function() {
incr = 1;
loadImage();
};
gal1.onPress = function() {
myGallery = 1;
myImage = 1;
loadImage();
};
gal2.onPress = function() {
myGallery = 2;
myImage = 1;
loadImage();
};
gal3.onPress = function() {
myGallery = 3;
myImage = 1;
loadImage();
};
[HR]
E avrai tre gallerie distinte, con le immagini tutte nella stessa cartella, con l’unico obbligo di rispettare i nomi.

Di: Professore | 26/09/2020 18:50:14


Ti ringrazio infinitamente Professore!!!
Non sai quanto mi hai aiutato.
ciao

Di: nannopoli | 26/09/2020 18:50:14