如何从pygame窗口中删除绘制对象



我正在使用pygame和python创建游戏。我在窗口中绘制了一个矩形,该矩形充当按钮。但是我需要知道如何单击按钮。这是我的代码:

import pygame, sys
from pygame.locals import *
x = 0
y = 0
#Basic stuff:
pygame.init()
screen=pygame.display.set_mode((640,360),0,32)
pygame.display.set_caption("Some random Title")

while True:
    evc = pygame.event.get()
    for event in evc:
        if event.type == pygame.QUIT:
        pygame.quit()
        sys.exit()
x,y = pygame.mouse.get_pos()
screen.lock()
#draw button:
my_rect = pygame.draw.rect(screen,(205,201,201),Rect((245,40),(130,80)))
bf1 = pygame.font.SysFont("monospace", 15)
bl = bf1.render("Play!!!", 1, (255, 255, 255))
screen.unlock()
#Check mouse click!!!
if my_rect.collidepoint(x,y):
   for event in evc:
       if event.type ==pygame.MOUSEBUTTONUP:
           screen.fill((255,255,255))

screen.blit(bl, (280, 70))
pygame.display.flip
pygame.display.update()

是的,我希望您能为此提供帮助。

您需要再次将所有内容绘制到屏幕上,除非您不需要的部分。

pygame.init()
screen = pygame.display.set_mode((700, 700))
# set background or fill
background = pygame.image.load("/background.png")
screen.blit(background, (0, 0))    
my_btn = pygame.image.load("/button.png")
btn_rect = my_btn.get_rect()
screen.blit(my_btn, (0, 0))
for evt in pygame.event.get():
    if evt.type == pygame.MOUSEBUTTONDOWN:
        pos = pygame.mouse.get_pos()
        if btn_rect.collidepoint(pos):
            # do stuff
            # apply your background fill or image
            screen.blit(background, (0, 0))
            for element in elements_you_want_on_screen:
                screen.blit(element, (location))
    pygame.display.flip()

如果您没有一系列闪电表面:

pygame.init()
screen = pygame.display.set_mode((700, 700))
# set background or fill
background = pygame.image.load("/background.png")
screen.blit(background, (0, 0))    
my_btn = pygame.image.load("/button.png")
btn_rect = my_btn.get_rect()
screen.blit(my_btn, (0, 0))
for evt in pygame.event.get():
    if evt.type == pygame.MOUSEBUTTONDOWN:
        pos = pygame.mouse.get_pos()
        if btn_rect.collidepoint(pos):
            # do stuff
            # apply your background fill or image
            screen.blit(background, (0, 0))
            screen.blit(your_image, (location))
            # ...and others if you have them
    pygame.display.flip()

我认为您应该为每个帧创建一个空白屏幕,然后再次绘制所有内容...

def draw(self):
self.screen.fill(self.color) #clear screen
self.draw(self.screen) # draw updated screen

如果您的代码中有不同的类,请尝试添加该部分:

self.#class#.draw(self.screen)

我刚刚发现,但您也可以将矩形的宽度和高度设置为0,然后再次绘制。我认为,更容易。

u可以用所有对象制作一个数组,然后迭代数组以绘制对象,然后在要删除它

时从数组中删除对象

我注意到您没有screen.fill((your colour))。如果将其添加到循环中,则可以使代码在变量为True时绘制按钮。单击按钮时,制作变量False。单击它后应该会使按钮消失。

希望有帮助!

最新更新