lunedì 16 gennaio 2012

Pygame for Android - Trackpad

Un esempio per usare il telefono come trackpad.
Non ho trovato nell'installazione di Python una funzione si legasse agli eventi del touchscreen cosi' mi sono orientato alla versione di Pygame per Android



sul cellulare ho fatto girare questo script
--------------------------------------------------------------------------------------------------
import pygame
import android
import socket

hostname = "192.168.0.1"; 
port = 21567;
data = "";
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM);
s.connect((hostname,port));

FPS = 10
TIMEREVENT = pygame.USEREVENT

pygame.init()
screen = pygame.display.set_mode((240, 320))
android.init()
android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)
pygame.time.set_timer(TIMEREVENT, 1000 / FPS)
while True:
ev = pygame.event.wait()
if android.check_pause():
android.wait_for_resume()
        if ev.type == pygame.MOUSEMOTION:
#print "pos (%d,%d)" % ev.pos
s.send(str(ev.pos[0])+";"+str(ev.pos[1]))
        elif ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
            break

------------------------------------------------------------------------------------------
a differenza di Py4A, per Pygame si deve creare una directory pygame sulla SD e creare una directory per ognuno degli script che si devono testare. All'interno di questa directory si deve inserire un file icona, il file script che si deve necessariamente chiamare main.py ed un file denominato anrdroid.txt (per i dettagli consultare il sito)

A differenza di Py4A non e' possibile importare in modulo bluetooth per cui lo scambio dati e' avvenuta in UDP

Di seguito il programma server che replica a computer i movimenti del dito su telefono
-----------------------------------------------------------------------------------------
import string
from socket import *
import pygame

pygame.init()
size=[240,320]
screen=pygame.display.set_mode(size)
clock=pygame.time.Clock()


host = "192.168.0.1"
port = 21567
buf = 1024
addr = (host,port)

UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)

while 1:
data,addr = UDPSock.recvfrom(buf)
if not data:
print "Client has exited!"
break
else:
valori = string.split(data,";")
screen.set_at((int(valori[0]), int(valori[1])), (255,0,0))
pygame.display.flip()

UDPSock.close()