有没有办法“清除”表面?

时间:2009-10-28 00:27:33

标签: python pygame geometry-surface blit

有没有办法清除表面上的任何物体?

10 个答案:

答案 0 :(得分:2)

我不知道你正在使用什么API,所以这里有一个模糊的答案:

在几乎所有情况下,“清除”表面只会使与其表面尺寸相同的彩色四边形上色。使用的颜色是您想要的清晰颜色。

如果你知道怎么做blit,只需在表面上涂上相同尺寸的白色四边形。

答案 1 :(得分:2)

您无法撤消写在另一个图形顶部的图形,只能撤消在同一块纸板上绘制在另一个粉笔图顶部的粉笔插图。

通常在图形中完成的是你用黑板做的事情 - 清除整个部分,下次只重绘你想要保留的内容。

答案 2 :(得分:2)

当我不关心表现时,我会使用:

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

将在整个表面上绘制指定的颜色(在这种情况下为黑色)。这是你所说的“清楚”吗?

哦,当然,你需要在这样做之后“翻转”表面才能在屏幕上看到它。

答案 3 :(得分:2)

我也有这个问题

创建表面:

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

清除表面:

mask.fill
mask.set_alpha(255)

画出你的线条/图像等

然后使用Alpha Blend标志将此表面blit到主表面

screen.blit(mask,(0,0),special_flags=(pygame.BLEND_RGBA_ADD))

答案 4 :(得分:2)

如果你想要的是制作一个pygame Surface对象" clean",那就是擦掉所有blit的图像,在每个游戏循环中将新图像blit到它并保持对等像素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)

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

答案 5 :(得分:1)

无论如何,

.fill((255,255,255,0))似乎对我有用。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

用填充物填充表面,然后使用set_alpha

使其透明
surface.fill
surface.set_alpha(255)

答案 8 :(得分:0)

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

self.image = 0 #to empty it
self.image = pygame.image.load("image")

答案 9 :(得分:0)

如果要在发条前清除表面,可以先用不太可能的随机颜色填充该表面,然后用该颜色设置alpha(色键),然后将具有透明背景的原始精灵重新发回该表面。

func callInfo(completion: @escaping (Date:Array<String>, Temper:Array<Float>) -> Void) -> {
    // ... do your data fetching

    // now the data is ready, call the handling function with data
    completion(_date, _temper)
}

// Usage
callInfo(completion: { (date, temper) in 
    // the following two lines will execute when the data is ready
    print(date)
    print(temper)
})