Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    34

    Eventi contemporanei, non funzionano entrambi.

    Ciao a tutti,

    Ho un problema forse più di concetto che altro....
    Ho progettato un filmato in flash diviso in due parti, una di presentazione contenuti ed una dove vengono situate delle clip duplicate che occupano parti dello spazio di questa sezione.
    Ho creato una funzione che si attiva con _root.onMouseDown (cioè ad ogni click del mouse sul filmato) che fondamentalmente controlla le coordinate del mouse e se questo è stato premuto nell'area dove vengono generate le clip duplicate procede con la funzione, altrimenti esce dalla funzione.
    Il problema è che le clip della seconda sezione le duplico in un ciclo, e nel ciclo associo ad ogni clip un evento onRelease (cioè alla loro pressione) che però non funziona, perchè la funzione del click del mouse ha predominanza. In teoria entrambe le funzioni dovrebbero attivarsi, prima una e poi l'altra, solo che quella associata al click del mouse fa partire di nuovo il caricamento delle clip duplicate e di conseguenza vengono cancellate quelle precedenti e con esse quella che ha scatenato l'evento OnRelease (che quindi non parte più).
    C'è un modo per ordinare al compilatore quale dei due eventi va sentito prima? oppure c'è un modo per verificare tutti gli eventi contemporaneamente sentiti dal compilatore (di modo che io possa fare un IF nella funzione associata al click del mouse)?

    Ho allegato un'immagine che illustra a grandi linee la struttura del filmato.

    Spero di essere stato chiaro.... grazie in anticipo.
    Immagini allegate Immagini allegate

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    è solo un piccolo errore progettuale

    se associ una funzione legata al mouse, direttamente a _root, otterrai che solo _root è cliccabile, mentre il resto del filmato è inesorabilmente interdetto all'interazione

    per fare in maniera più corretta quello che chiedi, da flash mx è stato introdotto un modo di lavorare con gli Object, che si prendono carico delle funzioni legati a determinate classi tipo Mouse o Key e gliene trasmettono il richiamo... nel tuo caso dovresti levare la funzione da _root e assegnarla ad un object, dopo di che, notificarlo alla classe designata (Mouse)

    codice:
    var mouseListener = new Object();
    mouseListener.onMouseDown = function(){
    	// azioni attualmente associate a _root
    }
    Mouse.addListener(mouseListener);

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    34
    Quello che mi hai risposto è sicuramente più giusto, ma ho provato e non funziona allo stesso, questo perchè mi viene eseguita sempre prima la MouseDown che nella funzione associata mi rimuove tutte le clip duplicate e con esse la clip che ha scatenato la OnRelease... di conseguenza non mi esegue più la OnRelease.
    A conferma di ciò ho il fatto che togliendo dalla funzione del MouseDown la parte che rimuove le clip duplicate flash mi esegue anche la onRelease.... però a me serve eliminare le clip!!!
    La cosa che mi servirebbe è appunto ordinare gli eventi, almeno prima gli faccio eseguire la onrelease e poi la mouseDown.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    34
    Ho risolto il problema... purtroppo aggirandolo ehehe!
    In ogni caso ho creato una clip di 1px per 1px e l'ho attaccata al mouse (con lo startDrag) poi mi sono memorizzato in un array i nomi delle clip duplicate e nella funzione del click del mouse, nella condizione di entrata oltre alle condizioni che c'erano già ho aggiunto la condizione che la clip attaccata al mouse non creasse una collisione(metodo hitTest) con tutte le clip memorizzate nell'array..... come purista è un po' brutta questa soluzione, però almeno funziona!

  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da jonny
    Quello che mi hai risposto è sicuramente più giusto, ma ho provato e non funziona allo stesso, questo perchè mi viene eseguita sempre prima la MouseDown che nella funzione associata mi rimuove tutte le clip duplicate e con esse la clip che ha scatenato la OnRelease... di conseguenza non mi esegue più la OnRelease.
    A conferma di ciò ho il fatto che togliendo dalla funzione del MouseDown la parte che rimuove le clip duplicate flash mi esegue anche la onRelease.... però a me serve eliminare le clip!!!
    La cosa che mi servirebbe è appunto ordinare gli eventi, almeno prima gli faccio eseguire la onrelease e poi la mouseDown.
    ahhhh... ora è più chiara la cosa , ovviamente non può andare bene lo stesso il codice che ti ho dato... i due eventi si devono susseguire

    ho letto anche l'altro messaggio che hai lasciato in cui dici di aver risolto...

    ti dico la mia... sempre se ho capito bene come si svolge esattamente... io avrei semplicemente assegnato il codice da eseguire per il mouseDown, agli onRelease, in modo che uno sia conseguente all'altro... cioè finchè non premo il pulsante, l'evento mouseDown non esiste

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.