【问题标题】:how to remove draw objects from pygame window?如何从pygame窗口中删除绘制对象?
【发布时间】:2014-02-02 21:34:58
【问题描述】:

我正在使用 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()

所以是的,我希望你能帮助我。

【问题讨论】:

    标签: python window pygame reset rect


    【解决方案1】:

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

    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()
    

    如果您没有要 blit 的表面数组:

    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()
    

    【讨论】:

    • 它不起作用,当我将 element_you_want_on_screen 中的元素更改为我在发布后添加的播放器中的元素时:它说 typeError: 'pygame.Surface' object is not iterable
    • 如果你只有一个pygame.Surface 或者表面不在数组中,只需在表面上调用 blit。你可以看到我的回复,我更新了它以显示这个。
    【解决方案2】:

    我认为你应该为每一帧创建一个空白屏幕并重新绘制所有内容......

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多