Newsgroup: it.comp.appl.macromedia
Titolo: || Director 7 || Gestione Bottoni complessi

Ciao a tutti,
ho deciso di cominciare a discutere di un behavour che uso in quasi
tutti i miei lavori. Si tratta di uno script non molto complesso ma
funzionale che potete attaccare a qualsiasi cast member che fungera'
da bottone nel vostro progetto multimediale. Questo script risponde
alle seguenti esigenze :
- cambia stato quando l'utente clicca, passa sopra(rollover) allo
sprite
- emette un suono diverso per i due stati sopra descritti
- cambia il cursore nello stato di rollover
- esegue un comando per navigare tra le varie label o tra i vari frame
o cambia movie.
Cominciano lo script creando le varie properties che ci serviranno ad
eseguire le funzioni prefissate :
-- Da qui in poi potete fare un copia e incolla dello script
-- script realizzato da Marco Casario.Se hai trovato lo script 
-- utile, o vuoi avere altre informazioni scrivimi all'indirizzo :
-- 
red...@tiscalinet.it
 o in ICQ : 42148979
--Basta attaccare lo script ad uno sprite e comparira' una finestra
--di dialogo in cui potrete impostare i diversi parametri
property pBottoneNormale,pBottoneStatoDown, pBottoneStatoRollover,
pPremuto
property pBottoneDown, pNomeBottoneDown
property pBottoneRollover, pNomeBottoneRollover, pCursore
property pEseguiSuonoDown, pSuonoDown, pEseguiSuonoRollover,
pSuonoRollover
property pNaviga, pNavigaFrame
-- Ora creo una getPropertydescriptionList che fa in modo che 
-- compaia una finestra di dialogo dei parametri del behaviour 
on getPropertyDescriptionList me  
  list = [:]
  -- Fa apparire un menu a popup in cui potete selezionare
  -- il tipo dello stato down del bottone. Piu' precisamente          
  -- potete scegliere tra Nessuno stato down, il nome del member 
  -- che rappresenta lo stato down oppure aggiungere automatica
  -- mente la parola 'down' al nome del meber dello stato     
  -- normale.Questo presuppone che abbiate un member nel cast
  -- che si chiama come il bottone normale piu' uno spazio e la 
  -- parola down.  
  addProp list, #pBottoneDown,¬
    [#comment: "Stato 'down' del bottone", #format: #string,¬
     #range: ["No stato down",¬
              "Aggiungi 'down'", "Nome dello stato down"],¬
     #default: "No stato down"]
  -- Permette di inserire il nome del pulsante nello stato Down
  addProp list, #pNomeBottoneDown,¬
    [#comment: "Nome del botton down", #format: #bitmap, #default: ""]
  -- Fa apparire una check box che informa se in fase di         
  -- click con il mouse sul bottone debba partire un suono  
  addProp list, #pEseguiSuonoDown,¬
    [#comment: "Esegui suono sullo stato down", #format: #boolean,
#default: FALSE]
  -- Permette di inserire il nome del suono da attivare        
  -- durante lo stato down del bottone 
  addProp list, #pSuonoDown,¬
    [#comment: "Scegli il sonoro dello stato down", #format: #sound,
#default: ""]
  -- Fa apparire un menu a popup in cui potete selezionare
  -- il tipo dello stato rollover del bottone. Vale il discorso     
  -- di prima.  
  addProp list, #pBottoneRollover,¬
    [#comment: "Stato 'rollover' del bottone", #format: #string,¬
     #range: ["No Rollover", "Aggiungi 'rollover'",¬
              "Nome Rollover"],¬
     #default: "No Rollover"]
  -- Permette di inserire il nome del pulsante nello stato Down
  addProp list, #pNomeBottoneRollover,¬
    [#comment: "Nome del bottone rollover", #format: #bitmap,
#default: ""]
  -- Fa apparire un menu a popup in cui potete selezionare
  -- il tipo di icona del mouse. Vale il discorso     
  -- di prima.
  addProp list, #pCursore,¬
    [#comment: "Cambia cursore", #format: #cursor, #default: ""]
  -- Fa apparire una check box che informa se in fase di         
  -- rollover sul bottone debba partire un suono
  addProp list, #pEseguiSuonoRollover,¬
    [#comment: "Esegui suono sul rollover", #format: #boolean,
#default: FALSE]
  -- Permette di inserire il nome del sonoro da attivare        
  -- durante lo stato rollover del bottone
  addProp list, #pSuonoRollover,¬
    [#comment: "Suono Rollover", #format: #sound, #default: ""]
  -- Fa apparire un menu a popup in cui potete selezionare
  -- il tipo della navigazione nel movie. Vale il discorso     
  -- di prima.
  addProp list, #pNaviga,¬
    [#comment: "Action Navigation", #format: #string,¬
     #range: ["Non navigare", "Go to frame", "Play frame", "Play
done","Go to movie"],¬
     #default: "None"]
  -- Permette di inserire il numero del frame o il nome del        
  -- movie
  addProp list, #pNavigaFrame,¬
    [#comment: "Inserisci frame o il nome del movie", #format:
#string, #default: ""]
 
 
  return list
 
end
on beginSprite me
  --Stabilisce lo stato iniziale dello sprite
  pBottoneNormale = sprite(me.spriteNum).member
  --Gestisce i vari casi dello stato Down
  case pBottoneDown of
    "No stato down":
      pBottoneStatoDown = member pBottoneNormale
    "Aggiungi 'down'":
      pBottoneStatoDown = member (pBottoneNormale.name&&"down")
    "Nome dello stato down":
      pBottoneStatoDown = member pNomeBottoneDown
  end case
  --Gestisce i vari casi dello stato Rollover
  case pBottoneRollover of
    "No rollover":
      pBottoneStatoRollover = member pBottoneNormale
    "Aggiungi 'rollover'":
      pBottoneStatoRollover = member
(pBottoneNormale.name&&"rollover")
    "Nome rollover":
      pBottoneStatoRollover = member pNomeBottoneRollover
  end case
  --Setta pPremuto a false
  pPremuto = FALSE
 
on mouseDown me
  --Setta pPremuto a true
  pPremuto = TRUE
 
  sprite(me.spriteNum).member = pBottoneStatoDown
 
  if pEseguiSuonoDown then
    puppetSound pSuonoDown
  end if
end
on mouseUp me
  pPremuto = FALSE
 
  sprite(me.spriteNum).member = pBottoneStatoRollover
  --Richiama l'handler esegui
  esegui(me)
end
on mouseUpOutside me
 
  pPremuto = FALSE
 
  sprite(me.spriteNum).member = pBottoneNormale
 
on mouseEnter me
  cursor(pCursore)
 
  if pPremuto then 
 
    sprite(me.spriteNum).member = pBottoneStatoDown
  else
 
    sprite(me.spriteNum).member = pBottoneStatoRollover
  end if
 
  if pEseguiSuonoRollover then 
    puppetSound pSuonoRollover
  end if
 
on mouseLeave me
 
  sprite(me.spriteNum).member = pBottoneNormale
 
  cursor(0)
end
--Gestisce i vari tipi della navigazione selezionata dall'utente.
on esegui me
  case pNaviga of
    "Go to frame":
      cursor(0)
      if value(pNavigaFrame) > 0 then
        go to frame value(pNavigaFrame)
      else
        go to frame pNavigaFrame
      end if
    "Play frame":
      cursor(0)
      play frame pNavigaFrame
    "Play done":
      cursor(0)
      play done
    "Go to movie":
      go to movie pNavigaFrame
  end case
on getBehaviorDescription me
  frase = ""
  put "Questo behavior e' stato creato da Marco Casario
(
red...@tiscalinet.it
)."&RETURN after frase
  put "Gestisce i due stati di un bottone generico (down e rollover)
con relativo sonoro."&RETURN after frase
  put "Permette di selezionare vari tipi di navigazione tra frame,
label o movie."&RETURN after frase
  put "Per usarlo basta trascinarlo sullo sprite che fungera' da
bottone e compilare la finestra delle proprieta'."&RETURN after frase
  return frase
 
end
  --Lo script di oggi e' terminato e spero di essere stato chiaro 
  -- e che sopratutto funzioni tutto. Fatemi sapere  all'indirizzo :
 -- 
red...@tiscalinet.it
 o in ICQ : 42148979
end
Le parole piu' belle del mondo non sono 'ti amo' 
ma: ' e' benigno'
red...@tiscalinet.it
ICQ : 42148979

Lo script funziona perfettamente. Quali sarebbero le parti che vorresti
migliorare?
Io per esempio avrei gradito trovare una llista dei marker esistenti o dei
cast member esistenti per facilitare e velocizzare la scelta.
appena ho un po' di tempo mi ci metto
--
ciao, Michele
se usi Outlook e rispondi R: e non RE:, patch:
http://utenti.tripod.it/vene/mail/patch.html
primo passo nel mondo NG: it.faq
per le prove: it.test


Michele non c'e' bisogno dicrearti una lista c'e' la proprieta'
#marker che fa comparire un popup con la lista di tutti i marker. 
addProp list, #pNomeFrame,Ź
    [#comment: "Scegli il nome della label",Ź
     #format:#frame, #default: ""]
ma :
addProp list, #pNomeFrame,Ź
    [#comment: "Scegli il nome della label",Ź
     #format:#marker, #default: ""]
Questo dovrebbe restrituire la lista di tutti i markers nello score
piu' i valore : next, previous.
Ciao
Le parole piu' belle del mondo non sono 'ti amo' 
ma: ' e' benigno'
Marco Casario
Multimedia Developer
red...@tiscalinet.it
ICQ : 42148979