Duda - Saber cuando clikean una imagen Python Pygame

Consulte acerca de programas, técnicas, algoritmos etc.

Duda - Saber cuando clikean una imagen Python Pygame

Notapor brutalchrist » Vie Nov 07, 2008 6:27 am

Primero que todo mis saludos, muy buen sitio!
Estoy creando un juego junto a un amigo y tenemos una gran duda. Al tratar de hacer un menú quedamos parados en saber cuando le hacen click auna imagen, me explico, el menú tiene un background y encima de el 3 imágenes (una de juego nuevo, una de opciones y una de salir). Queremos saber cuando le hagan click a una de estas imágenes para ejecutar la acción.

Código: Seleccionar todo
def Menu(self):
      while 1:
         for event in pygame.event.get():
            if event.type == pygame.QUIT:
               sys.exit()
         self.screen.blit(self.menu, self.menu.get_rect())
         self.screen.blit(self.Mnuevo, self.Mnuevo.get_rect(center=(150,100)))
         self.screen.blit(self.Mopciones, self.Mopciones.get_rect(center=(310,200)))
         self.screen.blit(self.Msalir, self.Msalir.get_rect(center=(210,300)))
         self.Mintro.set_volume(0.4)
         self.Mintro.play(-1)

         #Aquí debería ir un if que me diga que le hicieron clik a la imagen 'nuevo' y así dar comienzo al juego
         pygame.display.flip()
      



De antemano muchas gracias!
brutalchrist
 
Mensajes: 2
Registrado: Mar Nov 04, 2008 3:16 am

Notapor lucesita » Vie Nov 07, 2008 4:13 pm

yo de python se mas bien poco y nada, pero como supongo que estas trabajando con SDL, lo que tu puedes hacer, es detectar cuando se presiona el click izquierdo, en ese momento te fijas la coordenada tanto en X como en Y y te fijas si estan dentro de las coordenadas de tu imagen.

no se si me explique bien.

Saludos Lucesita
lucesita
 
Mensajes: 57
Registrado: Mié Mar 12, 2008 2:49 pm

Notapor hugoruscitti » Vie Nov 07, 2008 7:55 pm

Hay que hacer dos cosas en realidad, primero debes obtener la coordenada
del mouse cuando el usuario hace click sobre la pantalla y luego reconocer
sobre qué imagen a pulsado el usuario.

Para detectar la posición del mouse te comento que Pygame genera un evento
de tipo MOUSEBUTTONDOWN cada vez que el usuario pulsa el mouse, así que para
detectar la posición solo tienes que verificar cuando llega este evento
y consultar el atributo "pos" del mismo. Ampliando un poco el código anterior
quedaría:

Código: Seleccionar todo

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos

            print "ha hecho click en la posicion: ", x, y



Entonces, con la posición del mouse solo quedaría ver con qué imagen
colisiona. Lo que se puede hacer es usar el objeto Rect que genera
pygame, por ejemplo la siguiente sentencia:

Código: Seleccionar todo
destino_opciones = self.Mopciones.get_rect(center=(310,200))


genera un objeto Rect que tiene varios métodos como por ejemplo
'collidepoint', que te permite conocer si una coordenada está en contacto
con el rectángulo. Regresando al ejemplo anterior:

Código: Seleccionar todo
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos

            if destino_opciones.collidepoint(x, y):
                print "ha pulsado sobre 'destino_opciones'"


hay mas información de estos objetos en:

http://www.pygame.org/docs/ref/rect.html


Ah, y en la parte donde se imprime en pantalla también se puede
usar esta referencia al rectángulo:

Código: Seleccionar todo
self.screen.blit(self.Mopciones, destino_opciones)


Buena suerte.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor brutalchrist » Sab Nov 08, 2008 11:52 am

Muchas gracias lucesita y hugoruscitti. Pondre a prueba lo que me has dicho hugoruscitti, si me resulta les aviso.
Nuevamente muchas gracias por responder (=

Ya lo probé. Resulto todo muy bien (=
Muchas gracias por todo!
brutalchrist
 
Mensajes: 2
Registrado: Mar Nov 04, 2008 3:16 am


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron