Reputation: 2842
I'm new in pygame, right now I'm working with sprites. My question is how do I detect if the sprite has been clicked? I want to do something when the sprite was clicked as if it were a button.
Thank you.
[Edited]
Thank you, Stephen. In addition is there a way to know who is the sprite that was clicked? Here is sample code:
boxes = pygame.sprite.Group()
for color, location in [([255, 0, 0], [0, 0]),
([0, 255, 0], [60, 60]),
([0, 0, 255], [120, 120])]:
boxes.add(UpDownBox(color, location)
For example I click the sprite in location [0,0], the program should print its colour or its location.
Thanks again.
Upvotes: 6
Views: 17825
Reputation: 6279
It's been a long time since I did anything in Pygame, but IIRC the basic idea is that your sprite should have a rect
attribute that describes its position on the screen. When you receive a mouse click event, you get the position by calling pygame.mouse.get_pos()
. You can then check for a collision between a rect
centered at the mouse position and your sprite's rect by calling pygame.sprite.collide_rect()
on both rect
objects.
A good example can be found here.
Upvotes: 9
Reputation: 7501
Simpler: Rect.collidepoint(x,y)
#in event handling:
if event.type == MOUSEMOTION: x,y = event.pos
for box in boxes:
if box.rect.collidepoint(x,y): print 'yay!'
There are several more collision functions in both Rect and Sprite. See:
Upvotes: 7