pygame中按住鼠标单击时如何阻止变量增加

时间:2019-03-31 19:21:36

标签: python windows pygame

我有一个变量clickCounter,该变量在单击鼠标按钮(单击按钮时)并按住时会增加。当按住按钮并且仅在单击按钮时,如何阻止该值增加?

按钮功能(将其转换为类会更容易吗?):


def button(message, x, y, w, h, activeRGB, inactiveRGB, action=None): #example of color param for line 61/63 
    mouse = pygame.mouse.get_pos() #get location of mouse recorded by pygame
    click = pygame.mouse.get_pressed()
    global clickCounter



    if x+w > mouse[0] > x and y+h > mouse[1] > y: 
        pygame.draw.rect(gameDisplay, activeRGB, (x, y, w, h))
        if click[0] ==1 and action != None:
            if action == "countUP": 
                clickCounter+= 1
                print(str(clickCounter)) 
                pygame.display.update()



    else: 
        pygame.draw.rect(gameDisplay, inactiveRGB, (x, y, w, h))



    smallText = pygame.font.Font("freesansbold.ttf", 20) # constant has been declared, try deleting line when done w/ proj 
    textSurf, textRect = textBox(message, smallText) 
    textRect.center = (  (x + (w/2)), y+(h/2))
    gameDisplay.blit(textSurf, textRect)


主循环


closeGame = False   

while not closeGame: # this keeps the window from shutting down 
    for thing in pygame.event.get(): 
        if thing.type == pygame.QUIT: 
            closeGame = True 

        print(thing)






    gameDisplay.fill(white)
    button("Click me!", 300, 300, 100, 100, blue, brightBlue, "countUP")
    textObject(str(clickCounter), black, mediumText, 200, 200) 
    pygame.display.update()
    clock.tick(20)  


所有代码:

import pygame 

pygame.init() 


displayWidth = 700 
displayHeight = displayWidth 

gameDisplay = pygame.display.set_mode((700,700))

clock = pygame.time.Clock()

black = (0, 0, 0) 
brightBlue = (0, 0, 225) 
blue = (0, 0, 255) 

white = (255, 255, 255) #predef colors to make temp rgb value coding easier 

closeGame = False 

mediumText = pygame.font.Font("freesansbold.ttf", 70) #initalize font 
clickCounter = 0 

#def fontSize (pxsize):

    #pygame.font.Font("freesandsbold.ttf", pxsize)

def textObject (text, color, font, x, y):
    storedGenerate = font.render(text, 1, ((color))) 
    gameDisplay.blit(storedGenerate, (x,y)) 


def textBox(text, font): #purely for redturning rectangle around font// used for btn function only, tObject for displaying text  

    textSurface = font.render(text, True, black) #swap black for rgb later
    return textSurface, textSurface.get_rect()

def button(message, x, y, w, h, activeRGB, inactiveRGB, action=None): #example of color param for line 61/63 
    mouse = pygame.mouse.get_pos() #get location of mouse recorded by pygame
    click = pygame.mouse.get_pressed()
    global clickCounter

    if x+w > mouse[0] > x and y+h > mouse[1] > y: 
        pygame.draw.rect(gameDisplay, activeRGB, (x, y, w, h))
        if click[0] ==1 and action != None:
            if action == "countUP": 
                clickCounter+= 1
                print(str(clickCounter)) 
                pygame.display.update()
    else: 
        pygame.draw.rect(gameDisplay, inactiveRGB, (x, y, w, h))

    smallText = pygame.font.Font("freesansbold.ttf", 20) # constant has been declared, try deleting line when done w/ proj 
    textSurf, textRect = textBox(message, smallText) 
    textRect.center = (  (x + (w/2)), y+(h/2))
    gameDisplay.blit(textSurf, textRect)

closeGame = False   

while not closeGame: # this keeps the window from shutting down 
    for thing in pygame.event.get(): 
        if thing.type == pygame.QUIT: 
            closeGame = True 

        print(thing)

    gameDisplay.fill(white)
    button("Click me!", 300, 300, 100, 100, blue, brightBlue, "countUP")
    textObject(str(clickCounter), black, mediumText, 200, 200) 
    pygame.display.update()
    clock.tick(20)  

gameDisplay.fill(white)
pygame.display.update()
#logicloop()

pygame.quit()
quit()

我最初的想法是不使用pygame.mouse.get_pressed(),而是按下鼠标键,但无法使其正常运行。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

评估MOUSEBUTTONDOWN事件,而不是pygame.mouse.get_pressed事件。按下鼠标按钮时,事件会发生一次。

将按下的鼠标按钮存储到变量mousebutton中:

while not closeGame: # this keeps the window from shutting down 

    mousebutton = 0
    for thing in pygame.event.get(): 
        if thing.type == pygame.QUIT: 
            closeGame = True
        elif thing.type == pygame.MOUSEBUTTONDOWN:   
            mousebutton = thing.button

将变量传递给函数button

button(mousebutton, "Click me!", 300, 300, 100, 100, blue, brightBlue, "countUP")

评估是否在功能中按下了左按钮:

def button(mousebutton, message, x, y, w, h, activeRGB, inactiveRGB, action=None):  
    mouse = pygame.mouse.get_pos() #get location of mouse recorded by pygame
    global clickCounter

    if x+w > mouse[0] > x and y+h > mouse[1] > y: 
        pygame.draw.rect(gameDisplay, activeRGB, (x, y, w, h))
        if mousebutton == 1 and action != None:
            if action == "countUP": 
                clickCounter+= 1
                print(str(clickCounter)) 
                pygame.display.update()
    else: 
        pygame.draw.rect(gameDisplay, inactiveRGB, (x, y, w, h))

    # [...]

.button事件的MOUSEBUTTONDOWN属性为左键返回1,为中键返回2,向右键返回3,分别在鼠标滚轮向上滚动时返回4,在鼠标滚轮滚动时返回5。鼠标滚轮向下滚动。