Есть ли способ очистить поверхность от всего, что на нее попало?
Есть ли способ очистить поверхность?
Ответы (10)
Если вы хотите сделать объект pygame Surface "чистым", то есть стереть все изображения, перенесенные на него, связать с ним новые изображения в каждом игровом цикле и сохранить альфа-пиксель равноправного пикселя без создания новой поверхности, вы можете заполнить его, но вместо сплошного цвета используйте прозрачный цвет
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)
* Извините, мой английский плохой, я все еще учусь
Когда меня не волнует производительность, я использую:
mysurface.fill((0,0,0))
Который будет рисовать заданный цвет (в данном случае черный) по всей поверхности. Это то, что вы имели в виду под "ясно"?
О, и вам нужно, конечно, после этого «перевернуть» поверхность, чтобы она была видна на экране.
Я не знаю, какой API вы используете, поэтому вот расплывчатый ответ:
Практически во всех случаях «очистка» поверхности просто переносит на нее цветной четырехугольник того же размера, что и поверхность. Используемый цвет - это то, что вы хотите, чтобы ваш чистый цвет был.
Если вы знаете, как делать блит, просто блитируйте белый квадрат того же размера на поверхность.
Вы не можете отменить один рисунок, написанный поверх другого, точно так же, как вы не можете отменить один рисунок, нарисованный мелом поверх другого рисунка на той же доске.
В графике обычно делают то же, что и с доской: очищают все, а в следующий раз перерисовывают только то, что хотят сохранить.
У меня тоже была эта пробема
Чтобы создать поверхность:
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))
.fill((255,255,255,0))
у меня все равно работает.
Я использовал следующее в игре, которую я сделал:
self.image = 0 #to empty it
self.image = pygame.image.load("image")
Для pygame вы можете использовать Surface.fill
Заполните поверхность заливкой, затем сделайте ее прозрачной с помощью set_alpha
surface.fill
surface.set_alpha(255)
Если вы хотите очистить поверхность перед блитингом, вы можете сначала заполнить поверхность маловероятным случайным цветом, установить альфу (colorkey) с этим цветом, а затем блистать исходный спрайт с прозрачным фоном обратно на поверхность.
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))