Creiamo un nuovo programma e inseriamoci:
- tre campi testo: px, py e pz
- un'immagine di una sfera, che chiameremo ball
- uno slider che chiameremo scrollbar
Ora inseriamo il seguente codice nella card corrente:
on openCard
if the environment is "mobile" then
mobileEnableAccelerometer 20
set the width of scrollbar "scrollbar" to the width of me
set the bottom of scrollbar "scrollbar" to the bottom of me
set the left of scrollbar "scrollbar" to the left of me
end if
end openCard
on closeCard
if the environment is "mobile" then
mobileDisableAccelerometer
end if
end closeCard
on accelerationChanged pX, pY, pZ
put "Asse X: " & pX into field "px"
put "Asse Y: " & pY into field "py"
put "Asse Z: " & pZ into field "pz"
put the loc of image "ball" into theLoc
put the thumbPos of scrollbar "scrollbar" into kSensitivity
add (- pX * kSensitivity) to item 1 of theLoc
subtract (- pY * kSensitivity) from item 2 of theLoc
lock screen
set the loc of image "ball" to theLoc
if the left of image "ball" < 0 then set the left of image "ball" to 0
if the top of image "ball" < 0 then set the top of image "ball" to 0
if the bottom of image "ball" > the bottom of me then set the bottom of image "ball" to the bottom of me
if the right of image "ball" > the right of me then set the right of image "ball" to the right of me
unlock screen
end accelerationChanged
on arrowkey tKey
switch tKey
case "up"
send "accelerationChanged 0,-1,0" to me
break
case "down"
send "accelerationChanged 0, 1,0" to me
break
case "left"
send "accelerationChanged 1,0,0" to me
break
case "right"
send "accelerationChanged -1,0,0" to me
break
end switch
end arrowkey
Finito. Più sotto spiego il codice. Si poteva ottenere lo stesso risultato con molte meno righe di codice, ma così è più "educativo".
Ora abbiamo una sfera che si muove seguendo l'inclinazione del cellulare, lo slider serve a decidere la velocità della sfera.
Il risultato è scaricabile da: http://www.maxvessi.net/livecode/public/ball.livecode
Nel codice ho scritte parecchie cose, alcune vanno oltre quello che volevo trattare in questo posto, quindi le spiego qui per bene passo dopo passo:
OpenCard
Qui c'è un controllo per vedere se siete su un cellulare o un PC, in questo modo evitate messaggi di errore dovuti al fatto che non trova i sensori del cellulare quando lo usate su un PC.
Se siete su un cellulare accende i sensori, con il comando
mobileEnableAccelerometer
, controllandoli ogni 20 millisecondi.Inoltre posiziona lo slider in basso in modo da essere largo quanto tutta la larghezza dello schermo. Potevo anche utilizzare altre tecniche con un solo comando.
CloseCard
Qui spengo i sensori quando l'utente chiude l'applicazione. Forse gli fate risparmiare un po' di batteria.
AccelerationChanged
Questo messaggio legge i sensori. Qui prendo i dati dei sensori, che sono i valori di inclinazione dei tre assi (pX,pY,pZ) e li metto nei tre campi di testo presenti. In questo modo vedo se i sensori funzionano correttamente.
Poi uso i valori pX e pY per spostare la palla, mettendo tutta una serie di condizioni per evitare anche che esca fuori dallo schermo. Uso lock screen e unlock screen per non far vedere all'utente gli aggiustamenti della palla che compio per non farla uscire dallo schermo. Anche qui potevo prima calcolare meglio la posizione e poi impostare il loc, ma così è più semplice da leggere.
Lo scrollbar serve per regolare la sensibilità, cioè la velocità dello spostamento della palla, più è alto il valore dello scroller, più la palla andrà veloce.
ArrowKey
Questo non serve per il cellulare, l'ho aggiunto per poter muovere la palla sul PC utilizzando i tasti freccia. Assolutamente superfluo.
Se avete altre domande, potete chiederle nei commenti sotto al post.
Nessun commento:
Posta un commento