Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Comando a tempo prestabilito

    Cari amici di HTML.IT,
    ho da risolvere la seguente esigenza :

    " restando sullo stesso fotogramma ",
    rilasciando un pulsante1 o un movieclip1, (è uguale)
    devo far raddoppiare la dimenzione di un movieclip2, (fin qui è facile)
    ma in un tempo prestabilito da me, ad esempio di 3 secondi (questo non lo so fare!) .

    Per far raddoppiare semplicemente la dimenzione del movieclip2 rilasciando movieclip1,
    basta associare al fotogramma la seguente action script :

    movieclip1.onRelease = function() {
    movieclip2._xscale = 2*movieclip2._xscale;
    movieclip2._yscale = 2*movieclip2._yscale;
    };

    ma adesso, vi chiedo, cosa devo scrivere per far raddoppiare la dimenzione
    esattamente in 3 secondi ? Vi ricordo : " restando sullo stesso fotogramma " !

    Vi ringrazio anticipatamente .

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    195
    Ciao.
    Ho preparato una funzione che ti permette di fare quello che chiedi, in maniera da usarla migliaia di volte.
    codice:
    intervalArray = new Array();
    function ridimensiona(secondi, percInizio, percFine, movieclip, inizio, intervallo) {
    	fine = inizio+(secondi*1000);
    	ora = getTimer();
    	if (ora<fine) {
    		eval(movieclip)._xscale = percInizio+(percFine-percInizio)/(fine-inizio)*(ora-inizio);
    		eval(movieclip)._yscale = eval(movieclip)._xscale;
    	} else {
    		eval(movieclip)._xscale = percFine;
    		eval(movieclip)._yscale = percFine;
    		clearInterval(intervalArray[intervallo]);
    	}
    }
    Questa va posizionata in un frame della linea temporale, va bene anche il frame su cui stanno i tuoi elementi (il pulsante e il movieclip) oppure un frame precedente, l'importante è che non si trovi su un frame successivo, altrimenti ti troveresti a chiamare (cliccando sul pulsante) una funzione non ancora definita.

    Ora passiamo al pulsante... tutti gli elementi che ti servono li puoi definire qui dentro... ecco un esempio:
    codice:
    on (press) {
    	inizio = getTimer();
    	mc = "movieclip2";
    	percInizio = eval(mc)._xscale;
    	percFine = 200;
    	secondi = 3;
    	intervalArray[intervalArray.length] = setInterval(ridimensiona, 10, secondi, percInizio, percFine, mc, inizio, intervalArray.length);
    }
    Le variabili che puoi personalizzare sono:
    1. mc - Stringa - Il nome del movieclip che vuoi ridimensionare.
    2. percInizio - Numero - La percentuale iniziale, nell'esempio uso la percentuale attuale del movieclip, tu puoi decidere di partire sempre dal 100%, dal 200%, ecc...
    3. percFine - Numero - La percentuale di ridimensionamento al termine, nell'esempio è 200%, significa il doppio delle dimensioni originali, tu puoi anche decidere di utilizzare altri valori, per esempio se fosse
    codice:
    	percFine = eval(mc)._xscale/2;
    otterresti di dimezzare la dimensione ad ogni click, oppure puoi decidere di raddoppiarla o che ne so io.
    4. secondi - Numero - In quanti secondi deve essere eseguito il ridimensionamento, nell'esempio è 3, come volevi tu.

    Una domanda che mi aspetto è "a che serve mettere gli intervalli in un array?"
    Ho usato questo sistema così da lasciarti libero di creare tutti i pulsanti che vuoi, ognuno che comandi un movieclip diverso, senza che i vari "setInterval" e "clearInterval" litighino tra loro.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    195
    Ciao.
    Ho preparato una funzione che ti permette di fare quello che chiedi, in maniera da usarla migliaia di volte.
    codice:
    intervalArray = new Array();
    function ridimensiona(secondi, percInizio, percFine, movieclip, inizio, intervallo) {
    	fine = inizio+(secondi*1000);
    	ora = getTimer();
    	if (ora<fine) {
    		eval(movieclip)._xscale = percInizio+(percFine-percInizio)/(fine-inizio)*(ora-inizio);
    		eval(movieclip)._yscale = eval(movieclip)._xscale;
    	} else {
    		eval(movieclip)._xscale = percFine;
    		eval(movieclip)._yscale = percFine;
    		clearInterval(intervalArray[intervallo]);
    	}
    }
    Questa va posizionata in un frame della linea temporale, va bene anche il frame su cui stanno i tuoi elementi (il pulsante e il movieclip) oppure un frame precedente, l'importante è che non si trovi su un frame successivo, altrimenti ti troveresti a chiamare (cliccando sul pulsante) una funzione non ancora definita.

    Ora passiamo al pulsante... tutti gli elementi che ti servono li puoi definire qui dentro... ecco un esempio:
    codice:
    on (press) {
    	inizio = getTimer();
    	mc = "movieclip2";
    	percInizio = eval(mc)._xscale;
    	percFine = 200;
    	secondi = 3;
    	intervalArray[intervalArray.length] = setInterval(ridimensiona, 10, secondi, percInizio, percFine, mc, inizio, intervalArray.length);
    }
    Le variabili che puoi personalizzare sono:
    1. mc - Stringa - Il nome del movieclip che vuoi ridimensionare.
    2. percInizio - Numero - La percentuale iniziale, nell'esempio uso la percentuale attuale del movieclip, tu puoi decidere di partire sempre dal 100%, dal 200%, ecc...
    3. percFine - Numero - La percentuale di ridimensionamento al termine, nell'esempio è 200%, significa il doppio delle dimensioni originali, tu puoi anche decidere di utilizzare altri valori, per esempio se fosse
    codice:
    	percFine = eval(mc)._xscale/2;
    otterresti di dimezzare la dimensione ad ogni click, oppure puoi decidere di raddoppiarla o che ne so io.
    4. secondi - Numero - In quanti secondi deve essere eseguito il ridimensionamento, nell'esempio è 3, come volevi tu.

    Una domanda che mi aspetto è "a che serve mettere gli intervalli in un array?"
    Ho usato questo sistema così da lasciarti libero di creare tutti i pulsanti che vuoi, ognuno che comandi un movieclip diverso, senza che i vari "setInterval" e "clearInterval" litighino tra loro.

  4. #4

    ti ringrazio amico

    amico, scusa se ti ringrazio solo adesso ma sono stato muy impegnato, funziona benissimo grazie, alla prossima

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    195
    Visto che hai apprezzato il mio intervento posso rivelarti che la stessa cosa si può fare con solo due righe di codice, in ActionScript 2.0.

    Il motivo per cui non te l'ho detto prima è che sono bastardo, ma più in particolare non volevo darti un consiglio che avrebbe potuto darti chiunque, perfino su questo forum...

    Per realizzare una transizione con questo sistema devi importare la classe Tween, in questo modo:
    codice:
    import mx.transitions.Tween;
    Dopo che hai importato la classe puoi creare tutte le interpolazioni che ti pare, come se fossero realizzate sulla linea temporale, ad esempio se vogliamo raddoppiare la larghezza di un movieclip in tre secondi basta un rigo, questo:

    codice:
    var myTween:Tween = new Tween(myMovieClip, "_xscale", None, 100, 200, 3, true);
    La classe Tween può essere utilizzata per le più svariate interpolazioni e permette di fare delle cose interessanti (come la gestione dell'ease).
    Link alla documentazione ufficiale sulla classe Tween.


    Non odiarmi, l'ho fatto per il tuo bene, il mondo è pieno di persone che usano i componenti di Flash senza capire niente di quello che fanno, per come la vedo io, prima di usare un componente per comodità, un buon Flasher dovrebbe essere in grado di realizzare la stessa cosa a mano.

    Ciao.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    65
    Originariamente inviato da jollyfish
    Visto che hai apprezzato il mio intervento posso rivelarti che la stessa cosa si può fare con solo due righe di codice, in ActionScript 2.0.
    Ciao raga scusate il disturbo,
    uso spesso le transizioni di flash, talmente tanto spesso che mi piacerebbe costruirmi un metodo, una classe, ma anche solo una semplice funzione che mi consenta di applicare la medesima transizione in un ciclo.

    ho provato in molti modi ad ottenere quell'effetto ma senza successi.

    Il mio problema sta nel fatto che caricando (es. immagini) da xml, non posso sapere quanto sarà profondo un ciclo tra i nodi e quindi necessito di un metodo che:
    dato un movieClip mi applichi una transizione e poi passi al successivo.


    Codice PHP:
    import ..... 

    var 
    my_tween:Tween = new Tween(ecc..);
    my_tween.onMotionFinished = function() {
          var 
    my_tween2:Tween = new Tween(ecc..);
          
    my_tween2.onMotionFinished = function() {
               var 
    my_tween3:Tween = new Tween(ecc..);
    [
    ecc ecc ecc..... ]
          };
    }; 
    con onMotionFinished non può andar bene.

    se conosci tutorial o semplici dritte sull'argomento ti sarei grato se me le potessi segnalare.
    Ti ringrazio in anticipo.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.