martedì 29 marzo 2016

Creare sfocature o effetti pixellosi

Guardate questi due video:

Come Vedete è possibile creare dei fantastici effetti con livecode, ma come è possibile?
Basta utilizzare poche righe di codice, infatti per creare l'effetto dei pixel basta rimpicciolire l'immagine, salvarla piccola e poi ringrandirla. Ingrandendola si sgrana mostrando i pixel, ma se impostiamo la proprietà resizeQuality su best, livecode proverà a sistemare i pixel creando l'effetto sfocato.
Immaginiamo che l'immagine originale sia 1 e sopra abbiamo un'immagine copia (2) che di volta in volta sarà sempre più pixellosa, mente V è quanto pixelosa volgiamo l'immagine. Il codice per l'effetto pixel quindi è:

put width of this card * V * 0.01 into W
put height of this card * V * 0.01 into H
export snapshot from img 1 at size W,H to img 2

mentre per l'effetto sfocato:
set the resizeQuality of img 2 to "best"
put width of this card * V * 0.01 into W
put height of this card * V * 0.01 into H
export snapshot from img 1 at size W,H to img 2

venerdì 25 marzo 2016

Scelta data

Segnalo l'esistenza di un a finestra per la scelta della data: scaricabile qui

Funziona così: lo fate diventare un substack del vostro programma di nome, ad esempio calendarWidget100 e poi ogni volta che volete mettere un pulsante che faccia aprire la finsetra di scelta della data, mettete nel codice del pulsante:

on mouseUp
   put "2016" into anno
   put "3" into mese
   put "25" into giorno
   start using stack "calendarWidget100"
   get altAnswerDate(anno, mese, giorno)
   stop using stack "calendarWidget100"
   if it is empty then exit mouseUp
   put it into field "campo dove mettere la data"
end mouseUp


Per farlo diventare un substack di un altro programma, basta andare sul property inspector dello stack CaldarWidget e modificare il main stack dal menu a tendina impostando come main stack il nostro programma.
Ringrazio francof per la segnalazione.

venerdì 18 marzo 2016

Metadata dei caratteri

Una proprietà interessante dei caratteri è il metadato che livecode può associarci. In pratica in un campo di testo possiamo associare ad ogni carattere o gruppo di caratteri dei dati aggiuntivi, chiamati metadati.
Si può scrivere così:


   set the metadata of word 2 of field "esempio" to "Mario"
   set the metadata of char 1 to 3 of field "esempio" to "casa"


Le applicazioni sono varie, dai correttori ortografici a testi interattivi. Soprattutto in congiunzione con la funzione Mousechunk.
Ad esempio, cosa fa questo codice?
on MouseWithin   
   set the tooltip of me to ( the metadata of the mouseChunk)   
end MouseWithin

giovedì 17 marzo 2016

Annuncio di lavoro

Pubblico qui un annuncio di lavoro apparso sul forum. Se siete interessati scrivete a mtell@ngi.it

Ho un progetto che prevedo di metterci dai 20 ai 30 giorni a ricreare in livecode il un programma che avevo fatto su cdrom, ma basterebbe un piccolo imprevisto ad allungare i tempi, e sopratutto... non ho idea di cosa voglia dire lo sviluppo per iOS e Android
Non conosco i tool di sviluppo a cui livecode si deve interfacciare, non conosco i modelli di distribuzione, non ho idea di quali siano i tempi necessari per migrare un progetto nato su pc verso il mobile, e sopratutto non credo di avere il tempo per imparare...
QUINDI
c'è qualcuno in grado di aiutarmi (ovviamente retribuito) nell'ultima fase, vale a dire, una volta prodotto il progetto completo che giri su win, mac e linux a testare e produrre l'.app e l'.apk del progetto e mi spieghi come funziona la messa on line degli stessi?
L'ideale sarebbe qualcuno che abbia già esperienza di sviluppo di app multimediali per piattaforme mobile (o anche giochi, non penso che le skill necessarie siano molto diverse) ovviamente usando LiveCode e che magari si trovi nel triveneto (io vivo e lavoro a Udine), che possa già ora farmi un preventivo sul costo dell'operazione e che possa, verso la metà di aprile o poco dopo, dedicarmi il tempo necessario alla produzione dell' app/apk al suo debug ed alla sua distribuzione, e che magari possa emettere fattura. mtell@ngi.it 

mercoledì 16 marzo 2016

Analizzare un file audio WAV

Se volessimo analizzare un file audio, dovremmo prima di tutto sapere come è fatto. Uno dei formati più semplici è il wav, che non è compresso e i dati partono dopo il byte 44.
Il formato WAV, stereo, dopo il byte 44, pone due byte per il canale sinistro, due byte per il canale destro, e poi ricomincia. Per questo motivo possiamo fare un grafico leggendo questi byte.
Facciamo uno stack con:
  • un bottone
  • un campo di testo
  • un grafico di tipo linea
A questo punto nel pulsante mettiamo il seguente codice:

on mouseUp
   put URL "binfile:C:\Users\MAX\Documents\fanhit.wav" into MioAudio #percorso dell'audio da analizzare
   put 0 into cont #contatore byte
   put 0 into cont2 #contatore canale sinistro
   put 0 into cont3 #contatore punti del grafico
   repeat for each byte theByte in mioAudio
      add 1 to cont
      if cont > 44 then    #dopo il byte 44 possiamo analizzare l'audio
         add 1 to cont2 #contiamo i byte dei canali, 1 e 2 sinistro, 3 e 4 destro
         switch cont2
            case 1 #primo byte canale sinistro               
               put byteTonum(theByte) into temp
               break
            case 2 #secondo byte canale sinistro
               put temp + (256 * byteTonum(theByte)) into temp
               add 1 to cont3 #spostiamo lungo x sull'asse del grafico
               put cont3,byteTonum(theByte) & return after punti #aggiungiamo una riga di coordinate x,y per il grafico
               break
            case 4
               put 0 into cont2 #resettiamo il contatore dei canali
         end switch         
      end if      
   end repeat
   put punti into field 1 #vediamo l'elenco dei punti
   set the points of graphic "line" to punti #facciamo il grafico del canale sinistro
end mouseUp


Premendo il pulsante otterremo questo:

Ovviamente questo è solo un esempio molto semplice, ma da qui potete proseguire voi a fare od aggiungere effetti.

lunedì 14 marzo 2016

Livecode control version system

Ho appena rilasciato la prima versione di un programma CVS (control version system) per file livecode , cioè di controllo della versione.
Grazie a questo sistema potete vedere le differenze fra due sorgenti livecode e notare le differenze (proprietà, codice, tutto).
Riesce a fare ciò trasformando un sorgente livecode, che è un file binario, in un file XML. A quel punto utilizza i normali strumenti di CVS per testi.
Potete scaricarlo da qui: https://www.dropbox.com/s/vicx2jecx98nqzk/LivecodeDiff.livecode?dl=0
Ecco alcune immagini del programma:



Fatemi sapere le vostre opinioni nei commenti.

venerdì 11 marzo 2016

Personalizzare le colonne di un Datagrid

Oggi vediamo come personalizzare alcune colonne di un datagrid, in modalità tabella.
Prima di tutto creiamo uno stack con un datagrid di tre colonne:
Ora utilizziamo l'ispettore delle proprietà e alla voce colonne premiamo il pulsante + per le colonne 2 e 3 che vogliamo modificare.
Chiudete eventuali finestre che si aprono, perchè prima bisogna capire cosa sono.
Aprite l'application browser, come potete vedere, ogni volta che viene creato un datagrid, viene creato un substack relativo ad esso di nome "Data Grid Templates ..." seguito da un numero. Ora se vedete come è composto questo substack noterete due card: una con delle istruzioni contenente solo un gruppo chiamato DatagridTempaleInstrucion, e un'altra che contiene tutti gli oggetti utilizzati per il nostro datagrid.
Come vedete ci sono due gruppi chiamati col 2 e col 3, questi gruppi sono quelli che vengono creati quando abbiamo premuto il pulsante +, e vanno modificati se vogliamo personalizzare il nostro datagrid.
Selezioniamoli, levando il campo testo di cui sono composti e mettendoci dei pulsati:
Chiudiamo il substack e salviamo.
Ora dobbiamo aggiornare i rispettivi script di behavior che sono utilizzati per popolare le righe del nostro datagrid per le nostre colonne modificate. Se notate nell'application browser abbiamo anche i pulsanti col 2 behavior e col 3 behavior, modifichiamone i codici semplicemente sostituendo la parola field con la parola button, poichè noi abbiamo levato i field e messo un pulsante al loro posto. Questa sostituzione per ora va fatta solo nei messaggi: LayoutControl, FillInData, ResetData.
A seconda dei controlli utilizzati, lo script andrà modificato ulteriormente, ma nel nostro esempio queste modifiche sono sufficienti.
Abbiamo finito.
Ora possiamo creare un pulsante per aggiungere le righe con il seguente codice:

on mouseUp
   send "addLine 1" to group 1
end mouseUp

cliccandoci sopra ogni volta verrà aggiunta una riga con le modifiche volute:


Ho fatto anche un video a riguardo:

venerdì 4 marzo 2016

Messaggio textChanged

I campi di testo hanno varie messaggi che si attivano quando l'utente ci scrive: closeField, exitField, keyDown, keyUp, pastekey e così via...
Ognuno di questi ha la sua particolarità, ma se a noi interessa sapere solo quando il testo cambia, nell'esatto istante i cui cambia, a prescindere dal moto (tasti, mouse, copia e incolla, ecc.), ci basta usare il messaggio textChanged.
Ad esempio:
on textChanged
   enable button "save"
end textChanged

In questo modo non dovrete più alambiccarvi su quale utilizzare.

martedì 1 marzo 2016

CharIndex e lineIndex

Quando lavoriamo con testi può esserci utile sapere a che riga si trova un certo carattere o a che carattere comincia una certa riga.
Ad esempio il campo "testo" seguente:

questa è la prima riga
questa è la seconda riga

è composto da 47 caratteri. Per sapere a che carattere comincia la seconda riga basta scrivere:

  
put the charIndex of line 2 of field "testo"


il cui risultato è 24.
Mentre se vogliamo sapere in che riga si trova un certo carattere basta usare lineIndex:


put the lineIndex of char 26 of field "testo"


il cui risultato è 2.
Le proprietà charIndex e lineIndex possono essere utilizzati solo cui campi di testo (field).