Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    Loop random di swf esterni

    Salve a tutti!

    Ho un swf che fa da loader per altri swf esterni. Uso lo script di seguito, e fin qui tutto perfetto...

    var a:Number = Math.floor(Math.random()*3);
    loadMovieNum("assets/imgs/menu/swfs/god/god"+a+".swf", 1);

    ...quello che mi servirebbe però è che al termine del primo clip caricato ne venga pescato un'altro e così via in loop... aiutino?!

    Grazie anticipate!

    p.s. Se non fosse lampante non ho grosse conoscenze oltre al gotoAndPlay...

  2. #2
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Questo script carica random degli swf esterni, chiamati 1.swf, 2.swf, ecc. ecc., facendo in modo di non caricare lo stesso per due volte di fila.
    E' commentato, quindi dovresti riuscire a capirlo:
    codice:
    var n:Number;
    function loadRandomMovie(id:Number):Void{
    	// Azioni per il caricamento dei movie
    	loadMovieNum(id+".swf", 1);
    }
    function randomize(max:Number, min:Number):Void {
    	var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
    	if (randomNum != n) {
    		n = randomNum;
    		loadRandomMovie(n);
    	} else {
    		randomize(max, min);
    	}
    }
    function slideShow(temp:Number, max:Number, min:Number):Void {
    	var intervallo:Number = setInterval(randomize, temp*1000, max, min);
    }
    // Uso: slideShow(tempo permanenza movie in secondi, numero massimo contenuto nel nome del file, numero minimo contenuto nel nome del file);
    slideShow(1, 2, 1);

  3. #3
    Ciao gobbo e grazie 1000!

    C'è un modo per dargli una directory dove puntare che non sia la stessa del loader (come nel mio iniziale loadMovieNum("assets/imgs/menu/swfs/nomefile"+a+".swf", 1)? Inoltre non mi è chiara l'ultima nota e la gestione dello slideShow (dove nominare i file con numero minimo e massimo?!), e se i clip devono avere tutti la stessa durata o possono (come potrebbe essere) avere durate differenti.

    Grazie ancora per l'aiuto!

  4. #4
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Originariamente inviato da LONGE
    Ciao gobbo e grazie 1000!

    C'è un modo per dargli una directory dove puntare che non sia la stessa del loader (come nel mio iniziale loadMovieNum("assets/imgs/menu/swfs/nomefile"+a+".swf", 1)? Inoltre non mi è chiara l'ultima nota e la gestione dello slideShow (dove nominare i file con numero minimo e massimo?!), e se i clip devono avere tutti la stessa durata o possono (come potrebbe essere) avere durate differenti.

    Grazie ancora per l'aiuto!
    Allora, partiamo dal minimo e massimo:
    - flash da solo non è in grado di capire quanti file sono contenuti in una cartella, perciò dovresti sapere in partenza il numero di file.

    Inoltre flash non può sapere il nome di un file, quindi nella tua cartella dovresti avere:
    - nomefile1.swf
    - nomefile2.swf
    - nomefile3.swf
    ecc. ecc.

    In modo da dare come minimo 1, come massimo 3 e come stringa iniziale "nomefile".

    Per quanto riguarda la directory è subito fatto, come nel codice che vedi sotto.
    codice:
    var n:Number;
    var dir:String = "assets/imgs/menu/swfs/nomefile";
    function loadRandomMovie(id:Number):Void{
    	// Azioni per il caricamento dei movie
    	loadMovieNum(dir+id+".swf", 1);
    }
    ...
    ...
    ...

    Però penso ci sia un problema ed un'incomprensione di fondo. Questo codice, stabilisce in secondi quanto tempo i movies devono essere visibili. Non tiene assolutamente conto della durata in frames dei singoli movies.

    Se vuoi uno slideshow che...
    - capisca quanti movie ci sono in una cartella
    - capisca come questi movie si chiamano
    - carichi un movie random
    - ne calcoli la durata
    - capisca quando il movie è terminato e ne carichi un altro
    - ecc.
    - ecc.

    ...la cosa si fa un po' più complicata, e richiede l'utilizzo della classe MovieCliploader, forse di xml, forse di un linguaggio serverside, competenza in AS e molto tempo.

    Vista la tua premessa iniziale sulla scarsa conoscenza di AS penso che difficilmente si possa realizzare un codice del genere :master:

  5. #5
    Ok... parlando senza cognizione, con il rischio quindi di scrivere rare cialtronerie... ...non sarebbe possibile mettere alla fine di ogni movie esterno un comando di unload? ...con l'swf loader che quando percepisce che nessun movie è caricato rilancia il caricamento random?

  6. #6
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Originariamente inviato da LONGE
    Ok... parlando senza cognizione, con il rischio quindi di scrivere rare cialtronerie... ...non sarebbe possibile mettere alla fine di ogni movie esterno un comando di unload? ...con l'swf loader che quando percepisce che nessun movie è caricato rilancia il caricamento random?
    Potrebbe essere una soluzione un po' casereccia ma efficace, che richiede cmq l'uso di un preload. Appena riesco provo e ti rispondo.

  7. #7
    Beh si, ma vista la mia ignoranza in materia le soluzioni caserecce han sempre fatto da padrone! Non so se sia possibile, ma nel caso forse basterebbe mettere nell'ultimo frame dei file esterni un segnale per l'swf container che lanci un comando di unload e rilancio dell'azione di load in random, poi se si carica lo stesso di prima e non c'è soluzione non è un dramma...

    Intanto grazie ancora per il tuo tempo!

  8. #8
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Ok, penso di esserci:
    codice:
    var n:Number;
    var max:Number = 2;
    var min:Number = 1;
    var dir:String = "assets/imgs/menu/swfs/nomefile";
    var loader:MovieClip = this.createEmptyMovieClip("loader_mc", this.getNextHighestDepth());
    function loadRandomMovie(id:Number):Void {
    	var myLoader_mcl:MovieClipLoader = new MovieClipLoader();
    	var mclListener:Object = new Object();
    	mclListener.onLoadProgress = function(loader:MovieClip) {
    		var prog:Object = myLoader_mcl.getProgress(loader);
    		var pctLoaded:Number = Math.round((prog.bytesLoaded/prog.bytesTotal)*100);
    	};
    	mclListener.onLoadInit = function(loader:MovieClip) {
    		loader.onEnterFrame = function() {
    			if (this.finito) {
    				myLoader_mcl.unloadClip(loader);
    				randomize(max, min);
    			}
    		};
    	};
    	myLoader_mcl.addListener(mclListener);
    	myLoader_mcl.loadClip(dir+id+".swf", loader);
    }
    function randomize(max:Number, min:Number):Void {
    	var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min;
    	if (randomNum != n) {
    		n = randomNum;
    		loadRandomMovie(n);
    	} else {
    		randomize(max, min);
    	}
    }
    randomize(max, min);
    E' stato eliminato il setInerval, che è a questo punto inutile ed introdotto il preload, necessario.

    Piccole precisazioni:
    I valori di max e min [fermo restando quello detto sopra, riguardo le capacità di falsh] vanno settati, precisamente nelle variabili in riga 2 e 3.
    E' cmq ragionevole, che nominerai i tuoi file a partire dall'1, quindi dovrai modificare di volta in volta solo il max [volendo lo si potrebbe far caricare tramite un txt esterno].

    Importanti precisazioni:
    Seguendo la tua imbeccata ho creato nei due movies esterni da me usati per testare il codice una semplice animazione di forma, lunga 60 frames.

    Sul primo frame ho messo:
    var finito:Boolean = false;

    Sull'ultimo:
    finito = true;

    E' necessario che tu applichi questo procedimento per tutti i movies che ti interessa inserire, definendo la variabile nel primo frame della root. Potrai invece attribuire il valore finale dove vuoi...
    Naturalmente, questo metodo, che ripeto è un po' casereccio, funziona solo per movies poco elaborati. Se infatti devi gestire movies con animazioni indipendenti dalla root, contenute in dei movieClip, sarà difficile applicare questa soluzione.


  9. #9
    Ok gobbo, i miei movie sono (relaivamente) "complessi", ma ho pensato potesse essere una soluzione mettere nell'ultimo frame del mc più lungo un gotoAndStop ad un frame nella root con l'action; testando il solo filmato esterno funziona, ma testando il tutto, il container non funziona. Quello che ho fatto é stato copiare pari il tuo AS nell'unico frame del mio container cambiando solo la directory con nome file a riga 4. Sbaglio qualcosa?

  10. #10
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    In che senso "non funziona"?
    Cmq se il movie esterno funziona non dovrebbero esserci problemi.
    Ti ripeto, l'importante è che la variabile finito venga inizializzata nel primo frame della root. Poi volendo la puoi settare a true anche dentro il movieClip più lungo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.