(Pygame)鼠标悬停检测的问题

时间:2015-11-20 04:37:43

标签: python python-3.x pygame

我已经看过these posts,但仍无法进行鼠标悬停检测。我正在为一个为朋友工作的游戏开发一个简单的开始菜单;有两段文字,它们应该在盘旋时变成蓝色。

但是,当我将鼠标悬停在左上角时,它们只会变成蓝色:我假设我的代码检测到左上角的原始(未开发和未定位)曲面,并转换< em>那到一个rect,然后检查.collidepoint(pygame.mouse.get_pos())。

如何让它检测已经blitted和定位的文本?

这是我的代码(或者至少是引起麻烦的部分):

font = pygame.font.Font(os.path.join('.', 'bin', 'NOVEMBER.TTF'), 26)
playText = font.render("Play", True, lightGray)
settingsText = font.render("Options", True, lightGray)
setDisplay.fill(darkGray)
playText_rect = playText.get_rect()
settingsText_rect = settingsText.get_rect()

然后,在我的主循环中:

if settingsText_rect.collidepoint(pygame.mouse.get_pos()):
        settingsText = font.render("Options", True, grayBlue)
        setDisplay.blit(settingsText, (rightBorder / 2 - settingsText.get_width() / 2 + 200, bottomBorder / 2 - settingsText.get_height() / 2 + 120))
    elif playText_rect.collidepoint(pygame.mouse.get_pos()):
        playText = font.render("Play", True, grayBlue)
        setDisplay.blit(playText, (rightBorder / 2 - playText.get_width() / 2 - 200, bottomBorder / 2 - playText.get_height() / 2 + 120))
    else:
        playText = font.render("Play", True, lightGray)
        settingsText = font.render("Options", True, lightGray)

哦,如果它有所作为,我就会在Ubuntu上。

1 个答案:

答案 0 :(得分:1)

当您在.get_rect()上致电Surface时,生成的Rect确实将其xy位置设为0

解决此问题的一种简单方法是使用playText_rectsettingsText_rect进行blitting,而不是计算主循环中的位置。

# calculate the position once and but the rect at that position
playText_rect = playText.get_rect(topleft=(rightBorder / 2 - playText.get_width() / 2 - 200, bottomBorder / 2 - playText.get_height() / 2 + 120))
settingsText_rect = settingsText.get_rect(topleft=(rightBorder / 2 - settingsText.get_width() / 2 + 200, bottomBorder / 2 - settingsText.get_height() / 2 + 120))

...

# use the rect as position argument for blit
setDisplay.blit(settingsText, settingsText_rect)

...

setDisplay.blit(playText, playText_rect)