当我按下一个按钮时,正在按下两个按钮。 我使图像像按钮一样工作,但是当我按下第一个按钮时,第二个按钮也被按下了。 我是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()
答案 0 :(得分:1)
如果您在get_rect
上调用Surface
,则返回的结果Rect
将始终具有{{1}的x
和y
值}。
因此,当您在事件循环中运行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()
类,该类允许您组合Sprite
和Surface
。