我正在使用 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,然后再次绘制它。在我看来,这样更容易吗?
你可以用所有对象创建一个数组,并迭代该数组来绘制对象,当你想删除它时,只需从数组中删除该对象
我注意到你没有 screen.fill((your color))。如果将其添加到循环中,则可以使代码在变量为 True 时绘制按钮。单击按钮时,将变量设置为 False。这应该会使按钮在您单击后消失。
希望有帮助!