【问题标题】:after i click on image for blit when MOUSEBUTTONDOWN the new blit then disappear in pygame在我单击图像进行 blit 时 MOUSEBUTTONDOWN 新 blit 然后在 pygame 中消失
【发布时间】:2015-01-03 17:22:59
【问题描述】:

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

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 设置条件,但我不知道该怎么做。

【问题讨论】:

    标签: python image pygame mouse blit


    【解决方案1】:
    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()。 我已经更正了它,现在它可以工作了。

    实际上,只要您单击鼠标左键,它就会绘制矩形,但您只能看到 一个 矩形,因为它们在相同的坐标上。

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

    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 click[2] == 1:
        pygame.draw.rect(gameDisplay,black, (100,200,100,200))
        pygame.display.update()
    

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

    【讨论】:

    • @JaysonGalante 我编辑了我的答案,请再次检查。
    • 我尝试过使用精灵,但我仍然遇到同样的问题
    • 我忘了检查新编辑的对不起我会试试这个
    • 您可能做错了什么,打开一个新文件并复制粘贴此代码。他们在工作。所以你在你的程序中做错了。
    • 我试过了,它在没有精灵和图像的情况下工作,但是当我使用 collidepoint 时,它会返回同样的问题
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多