Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何确定鼠标是否在pygame精灵(不是矩形或圆形)上悬停/单击_Python_Pygame - Fatal编程技术网

Python 如何确定鼠标是否在pygame精灵(不是矩形或圆形)上悬停/单击

Python 如何确定鼠标是否在pygame精灵(不是矩形或圆形)上悬停/单击,python,pygame,Python,Pygame,所以我在做这个按钮,我需要找出两件事 1-用户何时在其上方悬停? 2-用户何时单击它? 正如你所看到的,这些形状很奇怪 我尝试过查看pygame论坛,但这些论坛只说明如何找出两个精灵是否发生碰撞。只需处理鼠标按钮下的事件,并对照每个精灵的rect检查事件。pos。如果发生碰撞,那就是单击的碰撞 这与悬停相同,只是您需要通过pygame.mouse.get_pos()函数获取每帧的鼠标位置 如果将所有按钮精灵放入精灵组,则执行这些检查将很容易 对于形状怪异的精灵,使用精灵面具可能会有所帮助。这是

所以我在做这个按钮,我需要找出两件事

1-用户何时在其上方悬停?

2-用户何时单击它?

正如你所看到的,这些形状很奇怪


我尝试过查看pygame论坛,但这些论坛只说明如何找出两个精灵是否发生碰撞。

只需处理
鼠标按钮下的事件,并对照每个精灵的
rect
检查
事件。pos
。如果发生碰撞,那就是单击的碰撞

这与悬停相同,只是您需要通过
pygame.mouse.get_pos()
函数获取每帧的鼠标位置

如果将所有按钮精灵放入
精灵组
,则执行这些检查将很容易

对于形状怪异的精灵,使用精灵面具可能会有所帮助。这是在每像素级别进行的额外检查(在矩形碰撞显示为true之后)。因此,虽然鼠标可能在精灵的矩形范围内做了一些动作,但可能它并没有真正覆盖精灵图像的可见部分

幸运的是,PyGame Sprite库可以轻松创建一个掩码,如果定义了,它将自动用作碰撞检测的一部分

class MaskedSprite( pygame.sprite.Sprite ):
    def __init__( self, image, x, y ):
        pygame.sprite.Sprite.__init__( self )
        self.image       = image.convert_alpha()
        self.mask        = pygame.mask.from_surface( self.image )  # <<-- HERE
        self.rect        = self.image.get_rect()
        self.rect.center = ( x, y )
class MaskedSprite(pygame.sprite.sprite):
定义初始化(自、图像、x、y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=image.convert_alpha()
self.mask=pygame.mask.from_surface(self.image)#