http://digilander.libero.it/Cenati MS Agent: Merlin |
|
|
||
|
Come animare il personaggio Merlin Agent è una applicazione che troviamo preinstallata su XP e su Win ME, ma è disponibile anche per NT. Si tratta di un personaggio che si può far apparire sullo schermo e che si esibisce in una serie di animazioni. Sul pc probabilmente troverete preinstallato il personaggio Merlin (in C:\WINDOWS\msagent\chars), ma ne esistono altri scaricabili dal sito Microsoft, come il robot Robby (3,16 Mb) e il genio della lampada Genie (2,65 Mb). Oltre a questi ci sono altri personaggi creati per mezzo di un kit di sviluppo che trovate sul sito http://www.microsoft.com/msagent/devdownloads.htm#character. Se cercate in biblioteca qualche libro su XP con cd allegato, con un po' di fortuna troverete anche qualche informazione su MSAgent e magari i file degli altri personaggi. Su un PC che utilizzo con XP e il Service Pack 2 ho trovato altri tre personaggi nella cartella Windows\Srchasst\Chars: Rover (un cagnolino che in italiano si chiama Briciola), Earl (un papero surfer, in italiano tradotto con Spido) e Courtney (una signorina su un'auto antigravità, in italiano si chiama Lalla). Sono installati come assistenti per la finestra di ricerca dei files, ma sono a tutti gli effetti dei personaggi animabili tramite script come Merlino. Nelle intenzioni di MS, Agent dovrebbe fornire una tecnologia innovativa e conversazionale per le applicazioni e le pagine web. Il file di help msagent.chm (698 kb) contiene in prefazione tutta una serie di considerazioni sociologiche sul comportamento di un Agent, sull'interazione sociale, sulla gestualità, sull'umore, sulla coerenza delle animazioni con la parte di programma che si sta eseguendo. Ad esempio, prima di far addormentare Merlino con Idle3_2, bisogna farlo sbadigliare con Idle3_1. Molto più semplicemente, Merlin è un maghetto che può intrattenere i vostri utenti mentre uno script è in esecuzione. La particolarità di questo oggetto è che le animazioni vengono accodate ed il programma continua subito nelle sue elaborazioni. Posso quindi dire a Merlin di salutare, dire qualcosa, fare una magia, ecc. Ma dato che le animazioni impiegano qualche secondo ad essere completate, il mio programma sarà andato già molto avanti nello svolgimento dei suoi compiti. Ci sono, per semplificare, due categorie di animazioni. La maggior parte si esauriscono da sole e tornano ad uno stato di attesa. Alcune hanno bisogno di un'istruzione apposita (.Stop) per terminare il ciclo infinito in cui entrano. Queste ultime sono utili per le fasi di elaborazione, in cui il personaggio "fa qualcosa" e dà l'impressione che anche il programma stia lavorando. Merlin, ad esempio, con l'animazione "processing" rimesta un calderone. Ecco uno spezzone di codice che attiva
Merlin e gli fa eseguire una serie di animazioni. Ne definisco la posizione iniziale e
lo faccio apparire con "Show". Alcune animazioni sono composte da più
parti, come DoMagic1 e DoMagic2. Nella prima parte Merlino agita la
bacchetta magica, nella seconda appare una nuvola di magia. "Announce"
suona una tromba con lo stendardo, "congratulate" mostra un trofeo, "wave"
saluta, ecc. Questo tempo può essere utilizzato per fare delle elaborazioni in modo che l'utente non ne percepisca la durata. Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script. '************************************************ ' File: Assistente.vbs ' Autore: Giovanni Cenati ' http://digilander.libero.it/Cenati '************************************************ Option Explicit Dim Agent, Merlin,n,animation Set Agent = CreateObject("Agent.Control.2") Agent.Connected = true Agent.Characters.Load "merlin", _ "c:\windows\msagent\chars\merlin.acs" Set Merlin = Agent.Characters("merlin") Merlin.Left = 0 Merlin.Top = 0 Merlin.Show Merlin.MoveTo 220,240 merlin.play "domagic1" merlin.play "domagic2" merlin.play "confused" merlin.play "announce" merlin.play "congratulate" merlin.play "wave" merlin.play "read" merlin.play "write" merlin.play "search" Merlin.Speak "Il programma è terminato" merlin.think "Speriamo sia andato tutto bene..." merlin.listen true Merlin.Hide msgbox "Ho già finito!" Do While Merlin.Visible: WScript.Sleep 10 : Loop Agent.connected = false Set Merlin = Nothing Set Agent = Nothing Se questo vi è sembrato interessante, ecco un breve codice che mostra tutte le animazioni possibili per il personaggio scelto. Visualizza i valori della collezione AnimationNames. Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente lo script. '************************************************ ' File: Assistente-elenco animazioni.vbs ' Autore: Giovanni Cenati ' http://digilander.libero.it/Cenati '************************************************ Option Explicit Dim Agent, Merlin,n,animation,a Set Agent = CreateObject("Agent.Control.2") Agent.Connected = true Agent.Characters.Load "merlin", _ "c:\windows\msagent\chars\merlin.acs" Set Merlin = Agent.Characters("merlin") For Each Animation in Merlin.AnimationNames a = a & animation & vbtab Next msgbox a L'elenco restituito avrà i seguenti valori: Alcune animazioni avrebbero bisogno di una animazione complementare per terminare il movimento in modo corretto. Nell'elenco, quelle che terminano con -return sono da chiamare per ritornare ad una situazione di attesa prima di passare ad un altro movimento. Valgono anche per i corrispondenti -blink, ad esempio bisogna usare LookDownReturn per terminare in modo naturale sia LookDown che LookDownBlink (guarda in basso e strizza l'occhio). Ho contrassegnato con un asterisco (*) le animazioni che entrano in un ciclo infinito. Queste non terminano automaticamente dopo essere concluse, ma devono essere esplicitamente interrotte usando il metodo .Stop. Possono essere utili per intrattenere l'utente durante una corrispondente elaborazione (ad esempio Reading, Writing, Processing). Un'ultima informazione... Alcune animazioni accendono un flag che è indagabile dal codice. Non è che ci abbia trovato tutta questa importanza, quindi vi rimando all'help per i dettagli. Segnalo che se Merlino è nel loop Hearing_n è posta a True la proprietà Hearing, mentre se sta dormendo (Merlin.Play "Idle3_2") sarà in stato Merlin.IdlingLevel3 = True. Gli altri stati si riferiscono ad azioni che si esauriscono da sole, quindi non mi sembra così importante indagare tramite il codice cosa sta facendo l'Agente in quell'istante. Buon divertimento. Giovanni Cenati |
||
© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com
|
|