Есть ли способ «очистить» поверхность? - PullRequest
6 голосов
/ 28 октября 2009

Есть ли способ очистить поверхность от всего, что было на ней надето?

Ответы [ 9 ]

3 голосов
/ 04 декабря 2009

Когда меня не волнует производительность, я использую:

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

Который будет рисовать указанный цвет (в данном случае черный) по всей поверхности. Это то, что вы имели в виду под «чистым»?

О, и вам, конечно, нужно «перевернуть» поверхность после того, как это будет сделано, чтобы она была видна на экране.

2 голосов
/ 18 июня 2015

Если вы хотите сделать объект «Поверхность» в Pygame «чистым», то есть стереть все изображения, перетекшие на него, добавить новые изображения к нему в каждом игровом цикле и сохранить альфа-пиксель равноправного узла, не создавая новую поверхность, вы можете заполните его, но вместо сплошного цвета используйте прозрачный цвет

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)

* Извините, мой английский плох, все еще учусь

2 голосов
/ 10 июля 2011

У меня тоже была эта проблема

Для создания поверхности:

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))
2 голосов
/ 28 октября 2009

Вы не можете отменить одно изображение, написанное поверх другого изображения, так же, как вы не можете отменить одно изображение мела, нарисованное поверх другого изображения мела на той же доске.

Что обычно делается в графике, это то, что вы делаете с классной доской - очистите всю партию, а в следующий раз перерисовывайте только то, что хотите сохранить.

2 голосов
/ 28 октября 2009

Я не знаю, какой API вы используете, так что смутный ответ:

Практически во всех случаях «очистка» поверхности просто приводит к тому, что на нее просто наносится цветной квадратик того же размера, что и поверхность. Используемый цвет - это то, что вы хотите, чтобы ваш чистый цвет был.

Если вы знаете, как делать блиц, просто стряхните белый квадратик того же размера на поверхность.

1 голос
/ 10 ноября 2014

.fill((255,255,255,0)), кажется, все равно работает для меня.

0 голосов
/ 14 октября 2015

Я использовал в своей игре следующее:

self.image = 0 #to empty it
self.image = pygame.image.load("image")
0 голосов
/ 28 октября 2009

Заполните поверхность заливкой, затем сделайте ее прозрачной с помощью set_alpha

surface.fill
surface.set_alpha(255)
0 голосов
/ 28 октября 2009

Для Pygame вы можете использовать Surface.fill

...