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

    disattivazione/attivazione pulsanti

    salve!

    ho un problema che non riesco a risolvere.. in un MovieClip ho diversi pulsanti e nella scena principale vorrei poter attivare o disattivare questi pulsanti.

    In pratica esiste un codice che mi permette di attivare o disattivare tutti i pulsanti presenti in un movieClip?

    ciao ciao!
    duke

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,776
    Ciao..

    Non so se esista una singola proprietà per disabilitare tutti gli elementi all'interno di un'istanza.

    Io ti propongo due metodi..

    - Primo metodo:
    Puoi utilizzare un ciclo "for in" per ottenere, in modo dinamico, tutti gli elementi presenti sul target specificato e renderne falsa la proprietà enabled.

    codice:
    for (var elemento in tuoMc) {
      tuoMc[elemento].enabled = false;
    }
    Questo metodo è abbastanza versatile perchè gli elementi vengono comunque ciclati uno per uno, per cui potrebbe tornare utile se devi identificare dei gruppi di elementi.

    Ad esempio puoi mettere una condizione per individuare solo i pulsanti, identificati come "object" tramite la funzione typeof.
    Metti magari il caso che vuoi fare una distinzione tra istanze di pulsanti e istanze di clip filmato, queste ultime identificate dal valore "movieclip" restituito dalla funzione typeof, in modo da disattivare solo i pulsanti.

    codice:
    for (var elemento in tuoMc) {
     if (typeof (tuoMc[elemento]) == "object") { 
      tuoMc[elemento].enabled = false;
     } 
    }
    Utilizzando questo metodo avrai quindi un controllo mirato degli elementi che vuoi disabilitare considerando anche eventuali elementi annidati a più livelli dentro il mc principale.
    Infatti nello script sopra saranno disattivati solo gli elementi presenti sullo stage del mc principale ma non eventuali elementi all'interno dei primi.


    - Secondo metodo:
    Puoi "commuttare" il mc principale in una istanza di pulsante, semplicemente attribuendole un evento mouse, e rendere quindi disattiva questa istanza.
    In una riga...

    codice:
    tuoMc.onRollOver = tuoMc.enabled=false;
    Sinceramente non ho mai visto in giro questo sistema.

    In effetti non è un metodo tanto "pulito" perchè l'evento onRollOver serve in questo caso solo per rendere l'istanza come pulsante in modo da dare a questa la priorità dell'area clicabile e di conseguenza disattivarla rendendo inattivi anche tutti gli elementi (che non avranno più priorità) al suo interno.
    Potremo dire però che il fine giustifica i mezzi.

    Per riattivare il mc e tutti gli elementi interni basterà eliminare la funzione onRollOver in modo che l'istanza torni a comportarsi come clip filmato e non più come pulsante.

    codice:
    delete tuoMc.onRollOver
    Non conosco altri modi..

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

  3. #3
    ciao! grazie mille per la risposta rapidissima, ma non sono riuscito a risolvere il problema.. provo a spiegarti meglio cosa mi succede:

    sto creando un gioco 'sparatutto' e ho creato dei nemici che escono da ogni dove e iniziano a sparare.. un nemico preso a caso è cosi formato: si trova all'interno del MC 'nemico1' in cui vi sono alcuni frames che fanno muovere il personaggio (per esempio farlo camminare), dopo questi frames c'è uno stop sul nemico che punta la pistola verso di me e spara; a quel punto vi sono quattro pulsanti trasparenti sul personaggio (testa,corpo,gambaD,gambaS), cosi a dipendenza di dove gli si spari viene eseguita un'animazione differente..

    nella scena principale ho un livello dedicato alla mia pistola (MC 'gun'). a questo punto ho creato un controllo che mi permette di vedere se la pistola ha ancora colpi nel caricatore e nel caso fosse scarica dovrei dare un comando che mi permetta di disabilitare tutti i pulsanti del MC 'nemico1' cosi da non poter uccidere il personaggio fino a quando non avrei ricaricato l'arma (riabilitando quindi i pulsanti del 'nemico1').

    provando a fare quello che mi hai detto tu mi da errore dicendo "il lato sinistro dell'operatore di assegnazione deve essere una variabile o una proprietà. nemico1[btn].enabled = false;"

    ciaooo!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    99
    Non so se sia la soluzione migliore ma io proverei a fare cosi (se ho capito bene il tuo problema).
    Nella root del filmato creo una variabile chiamata per esempio abilitazione_bersagli e la setto = true a questo punto se colpisco uno dei bersagli (testa, gamba, etc) modifico il valore a false. A questo punto suppongo che tu abbia sui pulsanti l'eventi on(release) e li aggiungerei un if che controllo se il valore di abilitazione_bersagli è uguale a true allora eseguo il codice come se avessi colpito il bersaglio altrimenti no. Quindi farei in modo che quando è possibile nuovamente sparare, risettare la variabile abilitazione_bersagli = a true.
    Spero di aver centrato il tuo problema.

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,776
    provando a fare quello che mi hai detto tu mi da errore dicendo "il lato sinistro dell'operatore di assegnazione deve essere una variabile o una proprietà. nemico1[btn].enabled = false;"
    :master: strano... ci sarà qualche passaggio che ci sfugge.

    Comunque sia, ora che hai esposto meglio la tua situazione, concordo anche io con la soluzione di Amok.

    Infatti è più logico porre una condizione che consenta o no di compiere l'azione dello sparo che sarà in questo caso inserita negli eventi dei pulsanti, o magari meglio ancora in una stessa funzione richiamata da ogni pulsante, così da snellire lo script e renderlo più dinamico.
    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.