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

    [ActionScript 3.0] Pulsante

    Salve,

    io ho creato un bottone chiamato bott che si compone di uno sfondo che cambia chiaramente tra fotogramma "Su", "Sopra","Giù", "Premuto" e di due caselle di testo dinamico chiamate Text e SubText (che mi piacerebbe fossero le stesse nei 4 fotogrammi, nel senso che se io cambio una caratteristica di Text in modo dinamico, vorrei che cambiasse in tutti e 4 i fotogrammi).

    In scena1 ho generato quindi diverse istanze del pulsante "bott". Mi piacerebbe quindi poter cambiare tramite action script il contenuto di Text e di SubText relativo all'oggetto "bott" desiderato.

    Istintivamente mi viene da scrivere bott1.Text.text="ciao"; però questo genera un errore in ActionScript 3.0. In generale, se possibile, vorrei capire come poter cambiare un componente interno ad un oggetto ClipFilmato/Pulsante/Grafico che sia.

    Grazie
    Programmazione .NET
    http://www.samueletosatto.tk

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    La sintassi che usi è corretta ma ti dà l'errore perchè stai usando un simbolo Pulsante, che è di tipo statico mentre invece il campo di testo è di tipo dinamico.

    Per risolvere il problema dovresti usare simboli MovieClip con i quali puoi comunque creare i vari stati di un pulsante.

    Prova a convertire i pulsanti che hai in Movieclip cliccandoci sopra con il tasto destro del mouse nella libreria del .fla e nel menù che appare vai sulle proprietà del simbolo.
    Cambia quindi dal menù a tendina il tipo di simbolo e metti "Clip filmato".
    Se hai già i simboli istanziati sullo stage cambia il tipo di simbolo anche dal pannello proprietà del simbolo sullo stage.

    Il tuo pulsante diventerà un movieClip e avrai la timeline classica dei MovieClip.
    Quelle funzionalità che avevi prima nel pulsante dovranno essere scritte nel codice (MouseOver, MouseOut, Click ecc.) ma hai il vantaggio di poter usare tutti i metodi e le proprietà dei MovieClip tra i quali anche il metodo .text

    Codice PHP:
    bott1.Text.text="ciao"
    Funzionerà perfettamente senza generare errori.

    ciao

  3. #3
    ok allora poniamo che del mio pulsante che ho trasformato in clip a me interessino solo due fotogrammi: quando il mouse è fuori e quando il mouse è all'interno.

    Scusa la domanda banale... come faccio a intercettare il mouse dall'interno della clip sull'evento mouseOver e mouseOut?

    Grazie mille :-)
    Programmazione .NET
    http://www.samueletosatto.tk

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Devi associare al clip un "ascoltatore di evento" (EventListener) e chiamare la funzione che deve essere eseguita in seguito all'evento mouse.

    Esempio: Il tuo clip è istanziato sullo stage con nome "pulsante".
    Nel primo fotogramma del clip, hai messo uno stop () e la grafica del pulsante in posizione mouseOut.
    Nel fotogramma 2, parte l'animazione che deve essere eseguita all'evento mouseOver e nell'ultimo fotogramma di questa animazione metti un gotoAndPlay (2); in modo che l'animazione vada in loop.

    Sullo stage principale, nel fotogramma che contiene il tuo clipPulsante metti questo codice:

    Codice PHP:
    pulsante.addEventListener(MouseEvent.MOUSE_OVERavviaClipOver);
    pulsante.addEventListener(MouseEvent.MOUSE_OUTavviaClipOut);

    function 
    avviaClipOver(evento:MouseEvent):void {
        
    pulsante.gotoAndPlay(2);
    }
    function 
    avviaClipOut(evento:MouseEvent):void {
        
    pulsante.gotoAndStop(1);

    Se vuoi che il puntatore del mouse quando sei sopra il clipPulsante diventi la classica manina dei pulsanti, aggiungi al codice, sopra o sotto non è importante:

    Codice PHP:
    pulsante.buttonMode=true
    Per il click sul pulsante, stesso discorso cambiando il tipo di evento da monitorare e ovviamente quello che vuoi che sia eseguito al click sul pulsante:

    Codice PHP:
    pulsante.addEventListener(MouseEvent.CLICKavviaFunzioneClick);

    function 
    avviaFunzioneClick(evento:MouseEvent):void {
        
    trace("Ho sentito che mi hai cliccato, ora che vuoi fare ?");

    ciao

  5. #5
    Ti ringrazio molto Sleter.

    Sopraggiungono però due problemi: il primo è che (non si sa per quale motivo), quando passo il mouse sulla casella di testo dinamico contenuta nel bottone, parte l'evento "mouseOut". E questo chiaramente non va bene.

    Inoltre, io avrei da mettere nella mia scena molte istanze di "bottone" però la mia idea sarebbe di non gestire l'evento sempre dall'esterno, innanzitutto proprio perché non mi piace come idea, e poi anche al fine di evitare molte righe inutili di copia-incolla. Mi piacerebbe intercettare il mouseOver e il mouseOut all'interno del bottone in modo tale che questo codice sia valido sempre ;-)... ovviamente in alternativa mi va bene anche così!

    Grazie ancora!
    Programmazione .NET
    http://www.samueletosatto.tk

  6. #6
    Ok sono riuscito a ovviare il secondo punto del problema con la parola magica "this" :-).
    Non credevo che esistesse anche in actionscript.. meglio!

    e invece persiste il problema del testo dinamico che rompe le scatole...
    Programmazione .NET
    http://www.samueletosatto.tk

  7. #7
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Codice PHP:
    bott1.Text.text="ciao"
    Questa è la sintassi corretta sia in AS2 che in AS3 per visualizzare un testo dinamico istanziato con nome "Text" annidato in un simbolo MovieClip con nome istanza "bott1".

    Se non vedi la scritta "ciao" nel testo dinamico, controlla di non avere selezionato il colore del carattere uguale al colore di sfondo del MovieClip.

    Sopraggiungono però due problemi: il primo è che (non si sa per quale motivo), quando passo il mouse sulla casella di testo dinamico contenuta nel bottone, parte l'evento "mouseOut". E questo chiaramente non va bene.
    Per evitare questo inconveniente aggiungi al codice:

    Codice PHP:
    bott1.mouseChildren=false
    Per l'altro problema puoi risolvere semplicemente assegnando nomi di istanza diversi per ogni pulsante che hai sullo stage.
    Come sai in AS3 non è consentito inserire codice all'interno dei simboli ma basta chiamarli con il suo nome istanza e eviti di sparpagliare il codice per tutto il .fla.
    Ritrovandoti il codice in un'unico fotogramma diventa più facile localizzare blocchi di codice specifici per eventuali correzioni o modifiche.



    Se poi vuoi ridurre in modo considerevole il codice per pulsanti che devono avere le stesse funzionalità e comportamenti ti suggerisco di leggere l'ultima parte di questo topic:
    http://forum.html.it/forum/showthrea...5#post12993815
    Dove ho cercato di spiegare l'utilizzo di Array indicizzati e ciclo for.
    Praticamente potresti avere 50 pulsanti con nome diverso sullo stage e controllarli tutti con una decina di righe di codice.

    ciao

  8. #8
    Oh yes!!! anche il problema del testo risolto ;-).
    Ho sempre utilizzato la parola chiave this in modo tale da estendere questa cosa a tutte le istanze!!

    this.mouseChildren=false;

    Grazie mille!
    Programmazione .NET
    http://www.samueletosatto.tk

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.