当我点击图像进行 blit 时,当 MOUSEBUTTONDOWN 新的 blit 然后消失在 pygame

after i click on image for blit when MOUSEBUTTONDOWN the new blit then disappear in pygame

我是 python 的新手,尤其是 pygame,想知道如何在 MOUSEBUTTONDOWN 之后让我的新图像 blit 这是我的代码:

color = pygame.image.load('billes.png')
red = color.subsurface(50, 70, 79, 71)
r = display.blit(red,(918,920))

def play():  
    if event.type == pygame.MOUSEBUTTONDOWN:
        pos = pygame.mouse.get_pos()
        if r.collidepoint(pos):
            display.blit(red, (10,10))
while True:
    ...
    for event in pygame.event.get():
        ...
        if event.type == MOUSEBUTTONDOWN and event.button == 1:
            if r.collidepoint(pos):
                display.blit(red, (800, 700))

当我点击鼠标左键时它显示我的新图像,但一秒钟后即使按钮仍然按下也消失了。我也尝试使用 pygame.mouse.get_pressed()[0] 但结果相同。 如何在 MOUSEBUTTONDOWN 之后维护新的 blit?我想用 MOUSEBUTTONUP 设置条件,但我不知道该怎么做。

import pygame
pygame.init()
red = (200,0,0)
white = (255,255,255)
gameDisplay=pygame.display.set_mode((800,600))

FPS=30
clock=pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            quit()
    cur = pygame.mouse.get_pos() #taking click events every time
    click=pygame.mouse.get_pressed() ##again, every time
    if click[0] == 1: #if left-clicked
        pygame.draw.rect(gameDisplay,red, (100,200,100,200)) #draw a red rectangle
        pygame.display.update() #and update the display


    clock.tick(FPS)

问题是,您在错误的地方使用了 pygame.display.update()。 我已更正它,现在可以正常使用了。

Actually this draws rectangle whenever you do left-click, but you can see only one rectangle because they are on the same co-ordinates.

如果您想确定这一点,请尝试:

import pygame,random
pygame.init()
red = (200,0,0)
white = (255,255,255)
black = (0,0,0)
gameDisplay=pygame.display.set_mode((800,600))

FPS=30
clock=pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            quit()
    cur = pygame.mouse.get_pos()
    click=pygame.mouse.get_pressed()
    if click[0] == 1:
        x=random.randint(1,700) #random coords of x
        y=random.randint(50,500) #random coords of y
        wx=random.randint(10,100) #random size of x
        hy=random.randint(60,200) #random size of y
        pygame.draw.rect(gameDisplay,red, (x,y,wx,hy)) #drawing with random variables
        pygame.display.update()


    clock.tick(FPS)

这表明我们的方法有效。还要注意,如果您继续按 左键单击,它将继续 绘制矩形。之前它也在画矩形,但是我们看不到它们,因为它们在同一个坐标上,这就是为什么看起来那个位置只有一个矩形的原因。

If you want to delete that rectangle, for example with right-click:

if click[2] == 1:
    pygame.draw.rect(gameDisplay,black, (100,200,100,200))
    pygame.display.update()

在第一个 if click 语句的底部添加这个。基本上它会在第一个矩形上绘制另一个矩形,注意相同的坐标,但与背景颜色相同。所以你的第一个矩形似乎被删除了:-)。