[英]When I keep clicking the square not always detects it
我不知道我的代码发生了什么,但有时会检测到我正在单击某些东西,有时却没有,这是一些代码
import pygame
from pygame.locals import *
import sys
pygame.init()
modeX=500
modeY=600
rectangulo=pygame.Rect(1,1,2,2)
num_dados=0
ven=pygame.display.set_mode((modeX, modeY))
fps=pygame.time.Clock()
def fill():
ven.fill((0,0,0))
def text(txt, x, y, size,font, color):
myfont=pygame.font.SysFont(font,size)
myText=myfont.render(txt,0,(color))
ven.blit(myText,(x,y))
class hitbox_things():
def __init__(self, X, Y,width, height):
global escena, num_dados
self.hitbox=pygame.Rect(X,Y,width,height)
pygame.draw.rect(ven, (255,0,255), self.hitbox)
if rectangulo.colliderect(self.hitbox):
for event in pygame.event.get():
if event.type==pygame.MOUSEBUTTONDOWN:
if event.button==1:
num_dados=num_dados+1
def hi_th_sprites():
hitbox_things(180,30,30,30)
hitbox_things(40,30,30,30)
text(str(int(fps.get_fps())), 2, 22, 40, "Fixedsys", (255,255,255))
text(str(num_dados), 100, 22, 40, "Fixedsys", (255,255,255))
def ipp():
fill()
hi_th_sprites()
################### UPDATE ##########################
class update:
def __init__(self):
while True:
FPS=fps.tick(60)
rectangulo.left, rectangulo.top=pygame.mouse.get_pos()
ipp()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
ven=pygame.display.set_mode((modeX, modeY))
update()
您可以根据需要复制它,如果您点击粉红色按钮,您会看到在某些情况下无法正常工作,谢谢
[...] 有时会检测到我正在点击某些东西,但有时却没有 [...]
这是由代码中的多个事件循环引起的。 注意, pygame.event.get()
获取所有消息并将它们从队列中删除。 因此,其中一个事件循环随机获取事件,而其他循环错过了它。 永远不会所有的事件循环都会得到所有的事件。 这导致某些事件似乎被错过了。
获取主循环中的事件列表并将它们传递给函数,以解决问题:
while True:
# [...]
# get the list of events
events = pygame.event.get()
# pass the vents to ipp
ipp(events)
# handle quit event
for event in events :
if event.type == QUIT:
pygame.quit()
sys.exit()
def hi_th_sprites(events):
hitbox_things(events, 180,30,30,30)
hitbox_things(events, 40,30,30,30)
# [...]
def ipp(events):
fill()
hi_th_sprites(events)
class hitbox_things():
def __init__(self, events, X, Y,width, height):
# [...]
if rectangulo.colliderect(self.hitbox):
for event in events: # <---- use events
if event.type==pygame.MOUSEBUTTONDOWN:
if event.button==1:
num_dados=num_dados+1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.