所以我想为主菜单设置“按钮”。这不是所有的代码,但我认为它可能是相关的部分。我已经通过打印语句/值来测试,当我按下按钮时,它正在注册鼠标,我知道文本的矩形(在这种情况下是play_game_rect),所以通过跟随另一个线程,我决定分配鼠标.get_pos()到变量mouse_position。然后我尝试了collidepoint()并传入了mouse_position变量。我觉得collidepoint()可能是执行此操作的正确方法。我还验证了mouse_position确实包含了我想要的x,y值。我认为这可能只需要修改一两行,但我被困住了。
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == MOUSEBUTTONDOWN:
mouse_position = pygame.mouse.get_pos()
if game_state == "Menu":
#Create Button Text
menu_main = headlines.render("Main Menu", True, WHITE)
play_game = standard.render("Play Game", True, WHITE)
instructions = standard.render("Instructions", True, WHITE)
# Get Button Dimensions
menu_main_rect = menu_main.get_rect()
play_game_rect = play_game.get_rect()
instructions_rect = instructions.get_rect()
#Blit Buttons
myWindow.blit(menu_main, (MENUX, MENUY))
myWindow.blit(play_game, (MENUX, MENUY + 120))
myWindow.blit(instructions, (MENUX, MENUY + 150))
print play_game_rect
if play_game_rect.collidepoint(mouse_position):
game_state == "Game"
答案 0 :(得分:0)
我想,仔细看看这里: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect 会回答你的问题!
如果没有,这是解决方案:
get_rect得到的矩形对x和y值总是有(0,0)。然而,当你对表面进行blit时,你会移动它们而不是矩形。因此按钮rect就在那里(尝试点击左上角的某处,看看会发生什么),但不能与按钮图像位于同一位置。
要解决此问题,您还必须转移矩形:
play_game_rect = play_game.get_rect()
play_game_rect.x = MENUX
play_game_rect.y = MENUY
为每个按钮执行此操作,它应该可以正常工作。如果您不明白问题所在,请再次询问,这是您经常遇到的一个重要问题。