Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    26

    [flash MX] problema con bottoni e script on(rollover) e on(rollout)

    Salve a tutti.
    ho un problema con un piccolo menu che sto facendo.
    ho 4 pulsanti e, on(rollover), fanno partire il frame 2(al frame 1 c'è uno stop) di una mc. in questa mc c'è l'animazione di una tendina con i link che esce fuori dal pulsante.
    on(rollout) la tendina torna dentro ma molto spesso, mettendo la freccia del mouse sopra uno dei bottoni e successivamente andando velocemente verso l'alto, le tendine rimangono "alzate" e si sovrappongono.
    Detto così sembra arabo muto... posto il link dove potrete prendere il fla con un esempio del menu.
    Per "ridondanza" ho anche messo intorno alle scritte/link un'area dove on(rollout) le tendine si richiudono... ma spesso è come se flash non vedesse il comando e le tendine rimangono su.

    Uomini di buona volontà, apsetto vostri insegnamenti.

    Grazie a tutti.
    Ur
    p.s. qui c'è il link dove trovare il .fla di cui sora.

    http://utenti.lycos.it/marchionne/prova1.fla

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Il problema sta nei pulsanti utilizzati per i testi/link.

    Probabilmente un passaggio abbastanza veloce del mouse "vede" il rollOver sopra i link ma non vede il rollOut del pulsante attorno ai più grande sotto i link.

    Prova a impostare il rolOut anche per ogni pulsante dei link.

    Per esperienza so che lo stesso problema viene dato anche quando si preme sul pulsante, ci si sposta dal pulsante e si rilascia il mouse.
    Per questo dovresti impostare, insieme all'evento rollOut, anche l'evento releaseOutside in questo modo:

    on (releaseOutside, rollOut) {
    this.gotoAndPlay(17);
    }

    Ti do qualche altro consiglio.
    Per creare un pulsante trasparente basta riempire il frame "Premuto" del pulsante stesso. In questo modo, durante la progettazione, vedresti li vedresti di un colore celestino semitrasparente.
    Invece ho notato che tu hai utilizzato dei pulsanti neri impostando alpha 0 per renderli invisibili.
    Un'altra cosa, potresti utilizzare più istanze dello stesso pulsante trasparente in più occasioni e ridimensionarle secondo il loro utilizzo. Mentre tu hai creato un pulsante nuovo ogni volta riempiendo così la libreria di simboli.

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    26
    Grazie veramente.
    L'idea del pulsante con l'evento sulla posizione "premuto" mi risolve un sacco di rogne (prima delle quali adesso vedo il pulsante senza ricorrere a cose strane!). Per quanto riguarda le istanze faccio così perchè in passato ho avuto brutte esperienze: creando un bottone solo e utilizzandolo più volte, ad ogni modifica di uno mi si modificavano pure tutti gli altri e veniva fuori un casino...
    Esiste un modo per fare quello che dici tu (un unico oggetto pulsante in libreria) potendo però scriptare ogni istanza con paramtri diversi (magari un pulsante è collegato ad una animazione più lunga e invece che gotoAndPlay(17) deve essere gotoAndPlay(25))?
    Per quanto riguarda mettere l'evento on(rollout) pure sui pulsantini non si può fare: appena "esci"dal pulsantino si chiude tutto il menù, io voglio invece che una volta aperto il menu si possa scorrere col mousesu e giu e farlo chiudere solo "uscendo" dalle scritte.

    Grazie ancora!

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    L'idea del pulsante con l'evento sulla posizione "premuto" mi risolve un sacco di rogne (prima delle quali adesso vedo il pulsante senza ricorrere a cose strane!).
    Bhe è la normale prassi per creare un pulsante trasparente.
    Per quanto riguarda le istanze faccio così perchè in passato ho avuto brutte esperienze: creando un bottone solo e utilizzandolo più volte, ad ogni modifica di uno mi si modificavano pure tutti gli altri e veniva fuori un casino...
    Esiste un modo per fare quello che dici tu (un unico oggetto pulsante in libreria) potendo però scriptare ogni istanza con paramtri diversi (magari un pulsante è collegato ad una animazione più lunga e invece che gotoAndPlay(17) deve essere gotoAndPlay(25))?
    Devi sapere che lo script ASSOCIATO ad una qualsiasi istanza agisce solo per quell'istanza diversamente da uno script che e CONTENUTO dentro un simbolo (sia lo script posto direttamente in un frame che associato ad eventuali istanze annidate nel simbolo) il quale sarà valido ovviamente per tutte le istanze figlie di quel simbolo.

    Nel tuo caso sono dei semplici pulsanti per cui puoi tranquillamente utilizzare più istanze di un unico simbolo pulsante.
    Per quanto riguarda mettere l'evento on(rollout) pure sui pulsantini non si può fare: appena "esci"dal pulsantino si chiude tutto il menù, io voglio invece che una volta aperto il menu si possa scorrere col mousesu e giu e farlo chiudere solo "uscendo" dalle scritte.
    Per quanto riguarda l'evento rollOut, anche se personalmente avrei agito diversamente utilizzando magari un hitTest, lo dovrai mettere su ogni pulsante dei TESTI/LINK, oltre che nel pulsante che sta sotto la tendina.
    Quando uscirai da uno dei testi/link non si chiuderà la tendina fintanto che il mouse resta sopra il pulsante sottostante, perchè anche in esso è presente l'evento rollOver che terrà aperta la tendina... Un evento esclude l'altro.

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    26
    mumble mumble... cos'è sta storia dell'hitTest? sembra un nome interessante.
    Tu dici un evento esclude l'altro... ma allora perchè tra i due dovrebbe "vincere" il rollover del piattone sotto? potrebbe essere eseguio il rollout del pulsantino. Insisto, benchè abbia già capito che stai 10 warp avanti a me sul flash, perchè c'ho provato e non funge ma visto che me lo proponi decisamente, riprovo e ti dico che ne viene fuori.

    La differenza tra script assciato e contenuto l'ho capita e me la sono già "rivenduta" (sostituendo nella scena i vari bottoni con istanze di un solo bottone "eletto" e ripulendo la libreria).

    Ma ora mi devi assolutamente dire cos'è l'hitTest!

    Gazie ancora.

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Tu dici un evento esclude l'altro... ma allora perchNN tra i due dovrebbe "vincere" il rollover del piattone sotto?
    Allora .. vediamo di non creare troppa confusione...

    C'è da chiarire una cosa.

    Non è possibile agire col mouse su più pulsanti contemporaneamente anche se questi sono sovrapposti e il cursore stà contemporaneamente su tutti.

    Flash darà priorità al pulsante che stà al disopra degli altri.

    (detto così sembra boliviano antico)

    Ti faccio un esempio per capire meglio.

    Ci sono due pulsanti uno sopra l'altro.
    codice:
    +-----------------+
    |  +------------+ |
    |  | PulsanteA  | |
    |  |            | |
    |  +------------+ |
    |   PulsanteB     |
    +-----------------+
    PulsanteA stà sopra PulsanteB, ovvero ha un ordine di profondità più elevato.

    Ad entrambi associo uno script del genere:

    on(rollOver){
    trace("tieni aperto")
    }
    on(rollOut){
    trace ("chiudi")
    }

    Più o meno come dovrebbe essere il tuo menu.

    Ora.. se passo su B avverrà l'evento rollOver che dice di tenere aperto. Se esco da B verso l'esterno avverrà normalmente l'evento rollOut che dice "chiudi".

    Fino a qui e tutto chiaro, no?

    Mettiamo però il caso che una volta che sono su B, passo direttamente su A..

    Cosà avverrà?

    Avviene per prima cosa l'evento rollOut di B (quello che dice "chiudi") perchè flash considera che sono uscito da B in quanto sono su un'altro pulsante.. ma subito dopo avviene l'evento rollOver di A che dice, no! "tieni aperto".

    Per questo motivo A, essendo l'ultimo ad avere la parola, avrà la meglio.

    Analogalmente accadrà passando da A a B

    Avverrà l'evento rollOut di A con l'azione "chiudi" che subito dopo verrà

    Nel tuo filmato A non aveva l'evento rollOut per chiudere. E probabilmente, con un passaggio veloce da A verso lesterno, flash non fa in tempo a "catturare" gli eventi di B, in particolare l'evento rollOut che "chiude le tende".
    Allora noi forzeremo il rollOut anche su A.

    Tutto chiaro... oppure ho mischiato ancora di più le acque?

    ...

    Passiamo ora all'hitTest

    Per capire meglio ti consiglio di vedere la guida di questa azione direttamente in flash.

    In pratica serve a verificare se una determinata istanza viene "colpita" da un'altra istanza (o da un punto) sullo stage.

    Nel tuo caso, con questo metodo, potrai risparmiare parte dello script che hai utilizzato per i vari eventi sui pulsanti, e riversare tuttu su un'unco "evento" verificato dall'hitTest.

    (vabbè ..questo diciamo che e glagolitico antico riveduto)

    Ti spiego meglio passo per passo come modificare il filmato con questo metodo:
    [list=1][*]Apri il tuo fla
    [*]Iniziamo con eliminare qualche evento del pulsantino (quadratino).
    Apri il pannello azioni e cancella tutto, poi inserisci solo questo evento:
    codice:
    on (rollOver) {
    	if (menu1._currentframe == 1) {
    		menu1.gotoAndPlay(2);
    	}
    }
    La condizione serve solo a non far ripetere l'animazione se la tendina è già aperta.
    [*]Entra in menu1 e vai fino a visualizzare le voci\link.
    Per ogni pulsante elimina l'evento rollOver, e qualunque altro evento che comanda l'animazione della tendina. Nel caso lascerai solo gli eventi release per il link.
    [*]Ora vai fino all'istanza del pulsantone sotto le voci menu.
    Dovrai cambiare questa istanza al posto suo ci dovrai mettere un nuovo simbolo di un frame che dovrà coprire l'area che comprende i link e il pulsantino principale

    In pratica al posto del pulsantone dovrai ottenere, con un istanza "Clip Filmato", una cosa del genere:
    codice:
    .-------------. 
    |  sublink 1  | 
    |  sublink 2  |
    |  sublink 3  |
    '. _ .--------'
     ||_||
     '---'
    La forma in rosso è il Clip Filmato.
    [*]Ora dovrai tornare al tuo vecchio metodo "alfizzando" il clip per renderlo trasarente. Oppure puoi semplicemente creare la forma stessa (all'interno del clip) di un colore con alpha 0.
    [*]Al clip associerai questo script:
    codice:
    onClipEvent (mouseMove) {
    	if (!this.hitTest(_root._xmouse, _root._ymouse, true)) {
    		_parent.gotoAndPlay(17);
    	}
    }
    [*]Un ultima cosa. Ho notato che hai utilizzato lo stesso nome istanza "bottone_1" per tutti e 4 i clip principali. Immagino sia una tua non curanza visto che il filmato era una prova iniziale, ma questo darebbe problemi con l'iht test che avrebbe riscontro soltanto sul primo dei 4 clip. Per cui ricordati di assegnare nomi istanza differenti. [/list=1]

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    26
    cacchio! una vera guida!
    che dire? Sei stato chiarissimo! L'hitTest è favoloso, mi roselve un bel po' di beghe anche da altre parti del filmato.
    Non ho il menu originale sottomano quindi per ora ho fatto una prova al volo e va alla grande! più tardi lo provo nel contesto e ti faccio sapere.

    Grazie ancora!

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    ..prego
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.