8

有什么办法可以清除表面上的任何东西?

4

11 回答 11

6

如果你想要让一个 pygame Surface 对象“干净”,即擦除所有贴在它上面的图像,在每个游戏循环中给它贴上新图像,并在不创建新表面的情况下保持对等像素 alpha,你可以填充它,但不要使用纯色,而是使用透明色

from pygame import Color, Surface
empty = Color(0,0,0,0) #The last 0 indicates 0 alpha, a transparent color
field = Surface((width, height), flags=SRCALPHA)

#Inside the game loop
field.fill(empty)

*对不起,我的英语不好,还在学习

于 2015-06-18T12:19:50.190 回答
5

当我不关心性能时,我使用:

mysurface.fill((0,0,0))

这将在整个表面上绘制指定的颜色(在本例中为黑色)。这就是你所说的“清晰”吗?

哦,当然,您需要在执行此操作后“翻转”表面以使其在屏幕上可见。

于 2009-12-04T10:30:24.147 回答
2

我也有这个问题

要创建曲面:

mask=pygame.Surface((180,100),pygame.SRCALPHA)

清除表面:

mask.fill
mask.set_alpha(255)

画你的线条/图像等

然后使用 Alpha Blend 标志将此表面粘贴到您的主表面上

screen.blit(mask,(0,0),special_flags=(pygame.BLEND_RGBA_ADD))
于 2011-07-10T14:11:40.470 回答
2

您无法撤消写在另一个图形顶部的一个图形,就像您无法撤消在同一板上的另一个粉笔插图顶部绘制的一个粉笔插图一样。

通常在图形中所做的是您对黑板所做的 - 清除全部内容,下次只重绘您想要保留的内容。

于 2009-10-28T13:51:33.770 回答
2

我不知道您使用的是什么 API,所以这是一个模糊的答案:

在几乎所有情况下,“清除”一个表面只是简单地将一个与表面大小相同的彩色四边形粘贴到它上面。使用的颜色是您想要的清晰颜色。

如果您知道如何进行 blit,只需将相同大小的白色四边形 blit 到表面上。

于 2009-10-28T00:37:20.077 回答
1

.fill((255,255,255,0))无论如何似乎对我有用。

于 2014-11-09T21:36:26.523 回答
1

我在制作的游戏中使用了以下内容:

self.image = 0 #to empty it
self.image = pygame.image.load("image")
于 2015-10-14T08:15:53.253 回答
0

用 fill 填充表面,然后用 set_alpha 使其透明

surface.fill
surface.set_alpha(255)
于 2009-10-28T02:34:59.107 回答
0

对于 pygame,您可以使用Surface.fill

于 2009-10-28T00:40:33.830 回答
0

您可以通过使其透明来清除表面。下面是我如何使用空颜色 RGB 通过将表面设置为切换到透明版本来使文本闪烁。

from __future__ import absolute_import, division, print_function
from itertools import cycle
import pygame

VISITOR_TTF_FILENAME = 'pixelFont.ttf'
BLINK_EVENT = pygame.USEREVENT + 0
empty = (255,255,255,0)


def main():
    pygame.init()
    try:
        screen = pygame.display.set_mode((800, 600))
        screen.fill((255,255,255))
        screen_rect = screen.get_rect()

        clock = pygame.time.Clock()

        font = pygame.font.Font(VISITOR_TTF_FILENAME, 50)
        on_text_surface = font.render(
            'Press Any Key To Start', True, pygame.Color('green3')
        )
        blink_rect = on_text_surface.get_rect()
        blink_rect.center = screen_rect.center
        off_text_surface = pygame.Surface(blink_rect.size)
        off_text_surface.fill(empty)
        
        blink_surfaces = cycle([on_text_surface, off_text_surface])
        blink_surface = next(blink_surfaces)
        pygame.time.set_timer(BLINK_EVENT, 1000)

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                if event.type == BLINK_EVENT:
                    blink_surface = next(blink_surfaces)

            screen.blit(blink_surface, blink_rect)
            pygame.display.update()
            clock.tick(60)
    finally:
        pygame.quit()


if __name__ == '__main__':
    main()
于 2021-10-05T20:42:51.563 回答
0

如果要在 blitting 之前清除表面,可以先用不太可能的随机颜色填充表面,使用该颜色设置 alpha(colorkey),然后将具有透明背景的原始精灵 blit 回到表面上。

idle_image = pg.image.load("sprite.png") #sprite with transparent background
temp_color = pg.Color(132, 23, 213, 255) #random unlikely replacement color

def clear_surface(surface):
    surface.fill(st.temp_color)
    surface.set_colorkey(st.temp_color)
    surface.blit(idle_image, (0,0))
于 2020-12-18T07:14:12.547 回答