Pygame - rect在我到达它之前消失了

时间:2015-11-03 18:58:28

标签: python python-2.7 pygame

我试图在按下中键时弹出一个矩形,然后保持弹出状态,直到我在pygame中按左键单击。

这是我的代码:

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 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

更改

objects

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:。他们完全一样。