当我按下一个按钮时,两个按钮被按下,pygame

时间:2019-03-28 13:53:15

标签: python pygame

当我按下一个按钮时,正在按下两个按钮。 我使图像像按钮一样工作,但是当我按下第一个按钮时,第二个按钮也被按下了。 我是pygame的新手,因此在单击每个按钮时都试图使按钮分别进行操作。

import pygame
import time

pygame.init();
screen = pygame.display.set_mode((340,340));
img = pygame.image.load('3.gif')
iimg = pygame.image.load('2.gif')
mg = pygame.image.load('4.gif').convert()
g = pygame.image.load('5.gif')
waitingForInput = False
pygame.display.set_caption("SIMON");
BEEP1 = pygame.mixer.Sound('beep1.wav')
BEEP2 = pygame.mixer.Sound('beep2.wav')
BEEP3 = pygame.mixer.Sound('beep3.wav')
BEEP4 = pygame.mixer.Sound('beep4.wav')
screen.blit(img,(0,0))
screen.blit(mg,(150,0))
pygame.display.flip()

def main():
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False

            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = event.pos

                if img.get_rect().collidepoint(mouse_pos):
                    print ('button was pressed at {0}'.format(mouse_pos))
                    BEEP1.play()
                    screen.blit(iimg,(0,0))
                    pygame.display.flip()
                    time.sleep(.30)
                    screen.blit(img,(0,0))
                    pygame.display.flip()


                if mg.get_rect().collidepoint(mouse_pos):
                    print ('button was pressed at {0}'.format(mouse_pos))
                    BEEP2.play()
                    screen.blit(g,(150,0))
                    pygame.display.flip()
                    time.sleep(.30)
                    screen.blit(mg,(150,0))
                    pygame.display.flip()

main()

1 个答案:

答案 0 :(得分:1)

如果您在get_rect上调用Surface,则返回的结果Rect将始终具有{{1}的xy值}。

因此,当您在事件循环中运行0时,无需检查if img.get_rect().collidepoint(mouse_pos)是否被点击。您检查鼠标的位置是否在屏幕的左上角。

也许使用一些Surface语句来检查自己。

您可以做的是为主循环的外部中的每个按钮创建一个print,然后使用这些矩形来发条:

Rect

请注意,您还应避免在主循环中使用... img = pygame.image.load('3.gif') img_rect = img.get_rect() ... mg = pygame.image.load('4.gif').convert() mg_rect = img.get_rect(topleft=(150,0)) ... while True: ... if event.type == pygame.MOUSEBUTTONDOWN: mouse_pos = event.pos if img_rect().collidepoint(mouse_pos): BEEP1.play() if mg_rect ().collidepoint(mouse_pos): BEEP2.play() screen.blit(img, img_rect) screen.blit(mg, mg_rect) 或多次调用time.sleep

另一种解决方案是使用pygame的pygame.display.flip()类,该类允许您组合SpriteSurface