2014-12-03 3 views
0

Итак, я пытаюсь получить «кнопки» для своего главного меню. Это не весь код, но его часть, на мой взгляд, может быть актуальной. Я тестировал, печатая утверждения/значения, что, когда я нажимаю кнопку вниз, он регистрирует мышь, и я знаю прямую текст (в этом случае play_game_rect), поэтому, следуя другому потоку, я решил назначить мышь .get_pos() к переменной mouse_position. Затем я попробовал collidepoint() и передал переменную mouse_position. Я чувствую, что collidepoint() может быть правильным методом для этого. Я также подтвердил, что mouse_position действительно содержит желаемое значение x, y. Я думаю, что это, вероятно, только строка или две, чтобы исправить, но я застрял.Нажав на рендеринг текста в pygame

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

Я думаю, что, имея более близкий взгляд на это здесь: http://www.pygame.org/docs/ref/surface.html#pygame.Surface.get_rect будет ответить на ваш вопрос!

Если нет, то вот решение:

Прямоугольника вы получаете с get_rect всегда есть (0, 0) для й и у значения. Однако, когда вы blit поверхности, вы перемещаете их, но не rect. Поэтому кнопка rect (попробуйте щелкнуть где-нибудь в верхнем левом углу и посмотреть, что произойдет), но не в том же положении, что и изображение кнопки.

Чтобы решить эту проблему, вы должны переместить прямоугольник слишком:

play_game_rect = play_game.get_rect() 
play_game_rect.x = MENUX 
play_game_rect.y = MENUY 

сделать это для каждой из кнопок, и она должна работать. Если вы не понимаете, в чем проблема, пожалуйста, спросите еще раз, это важная проблема, с которой вы столкнетесь очень часто.

+0

Я заметил отсчет 0 на x и y при печати моего прямоугольника. Для каждого, следующего за примером, мне нужно было выполнить play_game_rect.y = MENUY + 120 (так как это было фактическое play_game attritbute). Используя ваш пример, он вызовет мой текст в главном меню. В любом случае, это решило его, и, предоставив местоположение в документах, я потрачу немного больше времени на чтение этого раздела, чтобы убедиться, что я действительно понимаю. Я читал get_rect внутри шрифта и думал, что это тот звонок, который я делал , Огромное спасибо! Я как бы начал догадываться, что это может быть проблемой, но я не был уверен. Спасибо –

+0

Конечно, МЕНЮ + 120, я пропустил это, извините :) Но общий подход теперь ясен, правда? В противном случае не стесняйтесь спрашивать, рад, что я мог бы помочь! –

Смежные вопросы