Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178

    Movimento rallentato di un MC

    Ciao a tutti
    sto realizzando un sito in flash in cui il menu è composto da una serie di pulsanti diposti e suddivisi in 5 colonne (1 colonna per ogni categoria di pulsanti)
    Ognuna di queste colonne è un MC istanziato menu1, menu2, menu3, menu4, menu5.
    Questi menu sono posizionati uno accanto all'altro.

    Sopra di essi viaggia sull'asse x una barretta che è un MC istanziato "barretta" che si posiziona sul menu in cui mi trovo.

    il codice che ho usato è:

    _level0.barretta._x = wdth+cx+20;//wdth è la dimensione dello stage e cx la differenza tra lo stage iniziale e la dimensione del browser essendo un sito che in larghezza si adatta al 100% con il monitor.
    _global.posizioneinizialebarra
    _level0.posizioneinizialebarra = wdth+cx; //mette la barretta fuori dalla videata iniziale sulla destra
    _global.psx //variabile che preleva la posizione x del menu su cui mi trovo

    MovieClip.prototype.muovibarretta = function(x)
    {
    this._x += (x-this._x)/3;
    }

    this.onEnterFrame = function()
    {
    if(stato=="OFF")
    {
    _level0.barretta.muovibarretta(barx+wdth+cx);
    }
    }
    for (i=1;i<6;i++)
    {
    eval("_level0.menu"+i).ref = i
    eval("_level0.menu"+i).onRollOver = function ()
    {
    stato = "ON";
    _level0.psx = getProperty("menu"+this.ref,_x);
    this.onEnterFrame = function()
    {
    barx = getProperty("barretta",_x);
    _level0.barretta.muovibarretta(_level0.psx);
    }
    }
    eval("_level0.menu"+i).onRollOut = function ()
    {
    stato = "OFF";
    }
    }

    Tale metodo grosso modo funziona ma non come vorrei
    Il difetto che mi fa è che andando via dall'area composta dal gruppo dei 5 menu la barretta va via dal monitor verso destra ma se vado via dal primo menu la barretta si ferma prima della fine del monitor, se vado via dal secondo si ferma in un altro punto e cosi via.
    Altro difetto è che il movimento decellerato diventa sempre più scattoso man mano che passo da un menu all'altro

    Cos'è che non va?
    Iohannes

  2. #2
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Il fatto che non arrivi esattamente fuori dal monitor penso che sia per un errore nel codice.
    Il rallentamento progressivo è invece causato dall'apertura continua di enterFrame.

    Il metodo che io ti suggerisco sono le transition [articolo 1, articolo 2].

    In particolare ho provato a scrivere questo codice per il tuo caso, vedi se può andare:
    codice:
    import mx.transitions.*;
    import mx.transitions.easing.*;
    var stageW:Number = Stage.width;
    MovieClip.prototype.muovi = function(__x) {
    	var mov:Object = new Tween(this, "_x", Regular.easeOut, this._x, __x, 10, false);
    }
    var menu_array:Array = ["menu1", "menu2", "menu3", "menu4", "menu5"];
    for (i=0; i<=menu_array.length; i++) {
    	this[menu_array[i]].onRollOver = function() {
    		_root.barretta.muovi(this._x);
    	}
    	this[menu_array[i]].onRollOut = function() {
    		_root.barretta.muovi(stageW);
    	}
    }
    Naturalmente la barra che si muove è istanziata barretta e i 5 menu menu1, menu2, ecc ecc.


  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178
    Grande Funzia alla grande!!!!
    Ora devo studiarmi la sintassi di queste classi. Che sembra essere molto interessante.
    Ma le classi che tu hai richiamato sono incorporate nel flash?
    Cioè basta richiamarle e queste fanno il loro dovere?

    Ciao e grazie ancora!
    Iohannes

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178
    Ho un'altro problema:
    visto che ad ogni mc menu1, menu2 ecc ho associato l'evento

    this[menu_array[i]].onRollOver = function() {
    _root.barretta.muovi(this._x);
    }
    this[menu_array[i]].onRollOut = function() {
    _root.barretta.muovi(stageW);
    }
    RollOver e RollOut mi fanno apparire su ogni menu la manina del mouse e per questo mi inibiscono il funzionamento dei var MC che ho inserito all'interno di ciascun menu per animare un po' i vari pulsanti che mi ritrovo in ogni menu.

    Penso che ci sia un "conflitto" tra il rollover dell'intero menu con il rollover dei vari link interni.

    C'è un'instruzione che svolge la stessa azione di .onRollOver ma che non mi vada in conflitto con i pulsantini interni?
    Iohannes

  5. #5
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Originariamente inviato da iohannes
    Grande Funzia alla grande!!!!
    Ora devo studiarmi la sintassi di queste classi. Che sembra essere molto interessante.
    Ma le classi che tu hai richiamato sono incorporate nel flash?
    Cioè basta richiamarle e queste fanno il loro dovere?

    Ciao e grazie ancora!
    E' tutto spiegato negli articoli


    Originariamente inviato da iohannes
    Ho un'altro problema:
    visto che ad ogni mc menu1, menu2 ecc ho associato l'evento

    this[menu_array[i]].onRollOver = function() {
    _root.barretta.muovi(this._x);
    }
    this[menu_array[i]].onRollOut = function() {
    _root.barretta.muovi(stageW);
    }
    RollOver e RollOut mi fanno apparire su ogni menu la manina del mouse e per questo mi inibiscono il funzionamento dei var MC che ho inserito all'interno di ciascun menu per animare un po' i vari pulsanti che mi ritrovo in ogni menu.

    Penso che ci sia un "conflitto" tra il rollover dell'intero menu con il rollover dei vari link interni.

    C'è un'instruzione che svolge la stessa azione di .onRollOver ma che non mi vada in conflitto con i pulsantini interni?
    Dipende da "cosa" facevi fare ai vari mc all'interno dei menu, per esempio se gli facevi fare un gotoAndPlay puoi fare una cosa del tipo:
    codice:
    this[menu_array[i]].onRollOver = function() {
    		_root.barretta.muovi(this._x);
    		this.movieClipInterno.gotoAndPlay("frame");
    	}

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178
    Dentro ogni menu ho 5 pulsanti che sono realizzati con 5 mc alcui interno vi è dell'animazione con delle etichette (start, on, off).

    Normalmente io realizzo un area sensibile con un pulsante trasparente (quelli che sullo stage che appaiono sul color verdino, per intenderci) su cui applico un azione del tipo:


    per il pulsante n°1 del menu1:
    on (rollOver) {
    _level0.menu1.animazionepulsante1.gotoAndPlay("on" );
    }
    on (rollOut) {
    _level0.menu1.animazionepulsante1.gotoAndPlay("off ");
    }
    on (release){
    azione qualsiasi
    }
    per il pulsante n°2 del menu1:
    on (rollOver) {
    _level0.menu1.animazionepulsante2.gotoAndPlay("on" );
    }
    on (rollOut) {
    _level0.menu1.animazionepulsante2.gotoAndPlay("off ");
    }
    on (release){
    azione qualsiasi
    }

    ECC ECC.

    L'area sensibile la posiziono sopra ogni mc che deve dare l'effetto a ciascun pulsante.

    Se io posiziono ognuna di queste aree dentro i vari menu1, menu2 e cosi via, il metodo che sto utilizzando e che mi è stato suggerito magistralmente in questo topic non mi fa funzionare l'animazione dei vari pulsanti. Usando il trace, ho notato che in questa animazioni non ci entra neanche...

    Grazie comunque per l'aiuto prezioso!
    Iohannes

  7. #7
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Dunque animazionepulsante1 è un button o un movieClip?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178
    animazionepulsante1 è un movieclip.
    Quello che lo fa agire è l'area attiva trasparente che è un button...
    Iohannes

  9. #9
    Utente di HTML.it L'avatar di gobbo89
    Registrato dal
    Jun 2006
    Messaggi
    816
    Allora se la situazione è questa io strutturerei il menu in questo modo:
    - il simbolo menu deve contenere a sua volta un mc chiamato fondo_mc e le tue 5 [o quante ne vuoi] animazioni, che devono essere mc, istanziati per comodità animazione1_mc, animazione2_mc ecc. ecc.
    - le animazioni, come da te detto sopra, conterranno le 3 etichette [con opportuni stop();] (start, on, off)
    - a questo punto, avendo creato il simbolo menu, puoi trascinarlo sullo stage per 5 volte, istanziano rispettivamente come menu1_mc, menu2_mc ecc. ecc.
    - naturalmente sarà sempre presente la tua barretta, istanziata barretta_mc

    Una volta fatto ciò puoi incollare nel tuo primo ed unico frame principale questo codice:
    codice:
    import mx.transitions.*;
    import mx.transitions.easing.*;
    var stageW:Number = Stage.width;
    var pass:Boolean = false;
    MovieClip.prototype.muovi = function(__x) {
    	var mov:Object = new Tween(this, "_x", Regular.easeOut, this._x, __x, 10, false);
    };
    var menu_array:Array = ["menu1_mc", "menu2_mc", "menu3_mc", "menu4_mc", "menu5_mc"];
    var animazione_array:Array = ["animazione1_mc", "animazione2_mc", "animazione3_mc", "animazione4_mc", "animazione5_mc"];
    for (i=0; i<menu_array.length; i++) {
    	this[menu_array[i]].fondo_mc.onRollOver = function() {
    		_root.barretta_mc.muovi(this._parent._x);
    	};
    	this[menu_array[i]].fondo_mc.onRollOut = function() {
    		_root.barretta_mc.muovi(stageW);
    	};
    	for (a=0; a<animazione_array.length; a++) {
    		this[menu_array[i]][animazione_array[a]].onRollOver = function() {
    			this.gotoAndPlay("on");
    			_root.barretta_mc.muovi(this._parent._x);
    		};
    		this[menu_array[i]][animazione_array[a]].onRollOut = function() {
    			this.gotoAndPlay("off");
    			_root.barretta_mc.muovi(stageW);
    		};
    	}
    }
    Da notare sono le due linee rosse: puoi inserire quanti menu ti pare, ed all'interno di essi quante animazioni ti pare, chiamandoli come vuoi. Basta che una volta inseriti ti ricordi di aggiornare le array [con i nomi giusti naturalmente].


  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    178
    Sei grande GOBBO89!!!!!
    Usando il tuo ultimo codice funzia alla grande!
    Sei stato un grande! Vorrei poterti aiutare come hai fatto come me, ma con l'actionscript ancora me ce taglio!
    Iohannes

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.