如何检测何时单击矩形对象、图像或精灵

Posted

技术标签:

【中文标题】如何检测何时单击矩形对象、图像或精灵【英文标题】:How to detect when a rectangular object, image or sprite is clicked 【发布时间】:2020-03-13 23:41:12 【问题描述】:

我试图判断何时单击了必须属于特定组 (pygame.sprite.Group()) 的精灵。目前我已经尝试创建一个只是鼠标位置且完全不可见的精灵,将其添加到自己的组中,并使用以下代码:

clickedList = pygame.sprite.spritecollide(guess1, mice, False)

其中guess1 是被点击的精灵,mice 是包含具有鼠标位置的精灵的组。

当我尝试这个时,我被告知“组没有属性 rect”。我从这里去哪里?

【问题讨论】:

您是否 100% 确定 guess1Sprite 实例?看起来不像。 这能回答你的问题吗? how to detect if the sprite has been clicked in pygame @sloth 这是pygame.sprite.Group() 我需要使用精灵本身吗? @Valentino 不,答案中链接的示例已经消失,我不太明白其余部分在说什么,因为这几乎就是我正在做的事情,至少到目前为止据我所知。 【参考方案1】:

如果你有一个精灵 (my_sprite) 并且你想验证鼠标是否在精灵上,那么你必须获取 pygame.sprite.Sprite 对象的 .rect 属性并测试鼠标是否在.collidepoint()的矩形区域内:

mouse_pos = pygame.mouse.get_pos()
if my_sprite.rect.collidepoint(mouse_pos):
    # [...]

pygame.sprite.Group 中的 Sprite 可以迭代。所以可以循环进行测试:

mouse_pos = pygame.mouse.get_pos()
for sprite in mice:
    if sprite.rect.collidepoint(mouse_pos):
        # [...]

或者获取组内的精灵列表,鼠标所在的位置。如果 Sprite 不重叠,则列表将包含 0 或 1 个元素:

mouse_pos = pygame.mouse.get_pos()
clicked_list = [sprite for sprite in mice if sprite.rect.collidepoint(mouse_pos)]

if any(clicked_list):
    clicked_sprite = clicked_list[0]
    # [...]

【讨论】:

我正在使用第二个,但它总是返回为假。 mousePos = pygame.mouse.get_pos() for Circle in guess1: if Circle.rect.collidepoint(mousePos): ##... 问题可能出在精灵本身而不是条件上,还是我只是在这里遗漏了一些愚蠢的东西? (对不起,代码在 cmets 中格式不正确。) 我用它来定义类class Circles(pygame.sprite.Sprite): def __init__ (self, value, x, y): pygame.sprite.Sprite.__init__(self) self.value = value circleImage = pygame.image.load ("Outline.png") if value == 11: circleImage = pygame.image.load ("Unknown.png") self.image = pygame.Surface([40,40]) self.image.set_colorkey(WHITE) self.image.blit(circleImage,(0,0)) self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y并使用display.flip绘图 如果它更简单,我已经在谷歌文档here中获得了所有代码 是的,它是一个组。 @Nico 但它似乎工作正常guess1 是第二行的 4 个圆圈。如果你想改变圆圈的颜色,那么你必须在changeColour的末尾添加self.image.blit(circleImage,(0,0))

以上是关于如何检测何时单击矩形对象、图像或精灵的主要内容,如果未能解决你的问题,请参考以下文章

动画精灵与碰撞检测

如何检测用户何时单击 lyft 按钮 swift

如何检测何时单击/点击 MapMarker? [复制]

Sprite Sheet自动检测单个Sprite界限

如何在pygame中检测两个矩形对象或图像之间的碰撞

您如何检测“搜索”HTML5 输入的清除?