簡體   English   中英

當我繼續點擊方塊時並不總是檢測到它

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM