[英]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.