martes, 19 de febrero de 2008

Usando el mouse en pygame

Buenas tardes, hoy dia voy a explicar como utilizar el mouse en pygame, en especial como utilizarlo cuando se trata de juegos estrategias.

Primero: Para poder hacerlo visible o invisible el cursor del mouse:
pygame.mouse.set_visible(bool)

bool puede ser True o False segun se desee hacer visible o invisible el cursor

Segundo: para poder saber en que posicion de la pantalla esta el cursor utilizamos:
pygame.mouse.get_pos()

esta funcion devuelve un par de datos con las coordenadas x,y del cursor, por lo tanto la deberiamos llamar asi:

mouse_pos = pygame.mouse.get_pos()
o tambien:

mouse_pos_x, mouse_pos_y = pygame.mouse.get_pos()

Estos nombres son arbitrarios, los puedes cambiar, lo que debes saber es que: pygame.mouse.get_pos() te devuelve una tupla con las posiciones del mouse.

Tercero: Para saber si se esta presionando algun boton del mouse:
pygame.mouse.get_pressed()
devuelve un tupla de tres valores, que son los tres botones del mouse, los valores se encuentran en el mismo orden que los botones del mouse, o sea el valor de mas a la izquierda es el boton izquierdo del mouse y asi sucesivamente, si el boton se encuentra presionado, el valor es 1, en caso contrario es 0.

Resumiendo con codigo:

botones_mouse = pygame.mouse.get_pressed()
if botones_mouse[0] == 1: # o sea
print "hola"

Cuarto: tambien queremos poder saber si con el mouse estamos o no haciendo click sobre algo, para esto hay varias formas, una de ellas es aprovechar el rect de lo que estamos clickeando, eso seria mas o menos asi:

mouse_x, mouse_y = pygame.mouse.get_pos()
for objeto in objetos_del_juego:
if objeto.collidepoint(mouse_x, mouse_y):
print "algo"

una segunda opcion es construir un rect con la posicion del mouse, dandole un ancho y alto
y utilizando ese rect para detectar colisiones como explique en un post anterior

Para los que se entusiasmaron, buena suerte programando su primer RTS.

1 comentario:

Unknown dijo...

hola, bueno agradesco por la publicacion estubo interesante
pero yo queria aplicar esto con un jeugo de aventura.
¿funcionaria igual no es asi?
bueno
gracias
suerte