2015-11-03 165 views
1

我試圖在按下中鍵時彈出一個矩形,並保持彈出狀態,直到按下pygame中的左鍵單擊爲止。pygame - rect在我到達之前就消失了

這裏是我的代碼:

button1, button2, button3 = pygame.mouse.get_pressed() 
if button2 == True: 
    pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0) 
pygame.display.update() 

的事情是,當我按下中鍵單擊,出現矩形,然後消失瞬間。 我試過把它作爲while button2 == 2:,但程序掛起。

謝謝!

+2

代碼太短,我聽不懂。如果你可以擴展你的代碼將會很好 – Tushortz

+0

你是對的。我應該。我會發佈一個新問題。 –

+0

更詳細的問題是[here](http://stackoverflow.com/questions/33527600/pygame-rect-appears-and-immediately-disappears) –

回答

0

變化

button1, button2, button3 = pygame.mouse.get_pressed() 
if button2 == True: 
    pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0) 
pygame.display.update() 

button1, button2, button3 = pygame.mouse.get_pressed() 
if button2 == True: 
     rect_blit=True 
pygame.display.update() 

然後有

if rect_blit==True: 
    pygame.draw.rect(screen, ((255, 0, 0)), (0, int(h/2), int(w/6), int(h/2)-40), 0) 

某處主循環(pygame.display.update之前)。另一件事是你不必說if some_variable == True:。相反,你可以只說if some_variable:。他們做同樣的事情。

1

由於您想對不同的鼠標按鈕點擊作出反應,最好是傾聽MOUSEBUTTONUP(或MOUSEBUTTONDOWN)事件而不是使用pygame.mouse.get_pressed()

當按下鼠標按鈕時,您想要更改應用程序的狀態,因此您必須跟蹤該狀態。在這種情況下,一個變量就可以做到。

這裏有一個最小的完整的例子:

import pygame, sys 
pygame.init() 
screen = pygame.display.set_mode((300, 300)) 
draw_rect = False 
rect = pygame.rect.Rect((100, 100, 50, 50)) 
while True: 
    for e in pygame.event.get(): 
     if e.type == pygame.QUIT: 
      sys.exit() 
     if e.type == pygame.MOUSEBUTTONUP: 
      if e.button == 2: 
       draw_rect = True 
      elif e.button == 1: 
       draw_rect = False 

    screen.fill((255, 255, 255)) 
    if draw_rect: 
     pygame.draw.rect(screen, (0, 0, 0), rect, 2) 

    pygame.display.flip() 
相關問題