*Sugar Game y olpc game, hacen algo como esto:*
class PygameCanvas(gtk.EventBox):
def __init__(self):
gtk.EventBox.__init__(self)
self.set_flags(gtk.CAN_FOCUS)
self.setup_events()
self.socket = gtk.Socket()
self.add(self.socket)
self.button_state = [0,0,0]
self.mouse_pos = (0,0)
def setup_events(self):
self.set_events(gtk.gdk.KEY_PRESS | gtk.gdk.EXPOSE |
gtk.gdk.POINTER_MOTION_MASK | \
gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_MOTION_MASK |
\
gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
self.connect("key-press-event", self.keypress)
self.connect("button_press_event", self.mousedown)
self.connect("motion-notify-event", self.mousemotion)
self.connect('expose-event', self.expose)
self.connect('configure-event', self.resize)
self.connect("focus-in-event", self.set_focus)
def keypress(self, selfmain, event, parametros= None):
nombre = gtk.gdk.keyval_name(event.keyval)
tipo = pygame.KEYDOWN
unic = str.lower(nombre)
valor = nombre
try:
valor = getattr(pygame, "K_%s" % (str.upper(nombre)))
except:
print "no has programado la traduccion de esta tecla: ", nombre
return False
evt = pygame.event.Event(tipo, key = valor, unicode = unic, mod = None)
try:
pygame.event.post(evt)
except:
pass
return False
def mousedown(self, widget, event):
evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN,
button = event.button, pos=(int(event.x), int(event.y)))
try:
pygame.event.post(evt)
except:
pass
return False
def mousemotion(self, widget, event):
x, y, state = event.window.get_pointer()
rel = (x - self.mouse_pos[0], y - self.mouse_pos[1])
self.mouse_pos = (int(x), int(y))
self.button_state = [
state & gtk.gdk.BUTTON1_MASK and 1 or 0,
state & gtk.gdk.BUTTON2_MASK and 1 or 0,
state & gtk.gdk.BUTTON3_MASK and 1 or 0,
]
evt = pygame.event.Event(pygame.MOUSEMOTION, pos = self.mouse_pos,
rel = rel, buttons = self.button_state)
try:
pygame.event.post(evt)
except:
pass
return False
Desde hace meses, ninguna captura los eventos de teclado, para que los
capture, hay que grabar los eventos en la clase base de PygameCanvas, de
una de estas dos formas:
self.grab_focus()
self.grab_add()
Pero luego de esto, no podrás "desgrabar" los eventos, de modo que si tu
actividad tiene un menú base en gtk, no puedes volver a él luego de lanzado
el juego. El problema se encuentra en gtk, no es de sugar ni de pygame.
El 22 de mayo de 2012 18:16, Alan Jhonn Aguiar Schwyn
<[email protected]>escribió:
>
> Hola!
>
> En el CodeSprint estuvieron hablando del problema de los eventos de
> SugarGame/OlpcGames.
> Recién me doy cuenta que todas las actividades que usan SugarGame no están
> respondiendo
> a los eventos del teclado!!
> Los únicos eventos que obtengo son del tipo: 4 (MouseMotion)
> Creo que en el único lugar que reconoce los eventos es en la barra de
> actividad.
>
> Qué está pasando? Y desde cuando pasa esto?
>
> Saludos!
>
> Alan
>
>
> _______________________________________________
> Lista olpc-Sur
> [email protected]
> http://lists.laptop.org/listinfo/olpc-sur
>
>
_______________________________________________
Lista olpc-Sur
[email protected]
http://lists.laptop.org/listinfo/olpc-sur