我已经看过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上。
答案 0 :(得分:1)
当您在.get_rect()
上致电Surface
时,生成的Rect
确实将其x
和y
位置设为0
。
解决此问题的一种简单方法是使用playText_rect
和settingsText_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)