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

    Moto armonico (problema con onEnterFrame)

    Ciao. Sto facendo una simulazione particolare del moto armonico (rappresentazione grafica di un onda) e ho un problema con l'evento onEnterFrame.
    Dunque, sullo stage ho un pallino istanziato come "dot" che duplico orizzontalmente fino a formare una linea, così:
    codice:
    for (i=0; i<=550; i++){
         	
    	duplicateMovieClip (dot, "clip"+i, i);
    	mc = _root["clip"+i];
    	mc._x = _root.dot._x+i
    	mc._y = _root.dot._y
    }
    Successivamente vorrei far muovere, alla pressione di un pulsante, ogni singolo pallino di moto armonico.
    Uso la seguente azione:

    codice:
    on (Press) {
    
    t=0
    
    _root.onEnterFrame = function() {
    
    	for (i=0; i<=550; i++){
    		mc = _root["clip"+i]
    		mc._y = _root.dot._y + ampiezza*Math.sin(2*Math.PI*(t-mc._x/v))
    	}
    t++
    
    }
    
    }
    Dove ampiezza e v sono due parametri impostati a piacere.
    Premettendo che la formula matematica è corretta, il problema sta nel fatto che non succede assolutamente niente! L'evento onEnterFrame non viene rilevato! Ho provato a mettere un trace subito prima del ciclo for, ma non succede niente. Avrei preferito usare SetInterval, ma uso Flash 5 e mi sa che non la supperta. Però l'enterframe dovrebbe funzionare, no?
    Quale può essere il problema?

    Grazie a tutti. Ciao!

    Daniele

  2. #2
    ho provato a rifarlo ma effettivamente nn va nemmeno a me.
    sono su MX ma l'enterframe viene rilevato.
    sinceramente non saprei cosa andare a fare. sei sicuro sulla validità della formula?
    ampiezza e v a che valori vanno messi?

  3. #3
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    Allora sul frame metti:

    function duplica() {
    for (i=0; i<=550; i++) {
    duplicateMovieClip(dot, "clip"+i, i);
    mc = _root["clip"+i];
    mc._x = _root.dot._x+i;
    mc._y = _root.dot._y;
    }
    }


    Sul pulsante:

    on (press) {
    t = 0;
    _root.duplica();//richiamo la funzione sul frame era qui il problema
    _root.onEnterFrame = function() {
    for (i=0; i<=550; i++) {
    mc = _root["clip"+i];
    mc._y = _root.dot._y+100*Math.sin(2*Math.PI*(t-mc._x/50));
    }
    t++;
    };

    }


  4. #4
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453
    Se vuoi un effetto continuo e crescente metti questo sul frame:

    Qui il risultato: link

    function duplica() {
    for (i=0; i<=550; i++) {
    duplicateMovieClip(dot, "clip"+i, i);
    mc = _root["clip"+i];
    mc._x = _root.dot._x+i;
    mc._y = _root.dot._y;
    }
    }
    ampiezza = 0;
    v = 0;
    function loop() {
    t = 0;
    _root.duplica();
    _root.onEnterFrame = function() {
    for (i=0; i<=550; i++) {
    mc = _root["clip"+i];
    mc._y = _root.dot._y+ampiezza*Math.sin(2*Math.PI*(t-mc._x/v));
    }
    t++;
    ampiezza++;
    v++;
    };
    }
    setInterval(loop, 500);



  5. #5
    complimenti cacchio!

  6. #6
    Utente di HTML.it L'avatar di nep036
    Registrato dal
    Nov 2003
    Messaggi
    1,453

  7. #7
    Uhm... C'è qualche problema...
    Non mi va. In fondo la differenza tra il tuo codice ed il mio è che tu richiami la funzione duplica() dentro al pulsante, mentre io faccio eseguire la duplicazione al caricamento e poi vorrei che cliccando sul pulsante i clip si muovano. Solo che l'enterframe nn mi viene rilevato comunque....
    Cosa può essere il prob??

  8. #8
    Originariamente inviato da nep036
    Se vuoi un effetto continuo e crescente metti questo sul frame:

    Qui il risultato: link

    function duplica() {
    for (i=0; i<=550; i++) {
    duplicateMovieClip(dot, "clip"+i, i);
    mc = _root["clip"+i];
    mc._x = _root.dot._x+i;
    mc._y = _root.dot._y;
    }
    }
    ampiezza = 0;
    v = 0;
    function loop() {
    t = 0;
    _root.duplica();
    _root.onEnterFrame = function() {
    for (i=0; i<=550; i++) {
    mc = _root["clip"+i];
    mc._y = _root.dot._y+ampiezza*Math.sin(2*Math.PI*(t-mc._x/v));
    }
    t++;
    ampiezza++;
    v++;
    };
    }
    setInterval(loop, 500);


    Se togli ampiezza++ e v++, ma lasci solo t++ è esattamente quello ke voglio fare io. Il problema è che con Flash5 setInterval non va!

  9. #9

  10. #10

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