Есть ли способ очистить поверхность от всего, что было на ней?Есть ли способ «очистить» поверхность?
ответ
Я не знаю, что API вы используете, так вот расплывчатый ответ:
Практически во всех случаях «очистка» поверхность просто БЛИЦ цветной четырехъядерных того же размера, что и поверхности на нее. Используемый цвет - это то, что вы хотите, чтобы ваш четкий цвет был.
Если вы знаете, как сделать blit, просто накройте белый квадрат того же размера на поверхности.
Для Pygame вы можете использовать Surface.fill
Да, я мог бы использовать его, но вот сложная часть: Моя поверхность расплывается на другой поверхности и использует флаг SRCALPHA для поддержки прозрачности. Если я заполняю всю поверхность сплошным цветом, вся моя игровая доска превратится в этот цвет, так как эта поверхность расплывается во всем .... И я не знаю, как решить эту проблему – Eric
@ Эрик, вы должны добавить эти требования к вашему вопросу –
Заполните поверхность заливки, а затем сделать его прозрачным с set_alpha
surface.fill
surface.set_alpha(255)
Хорошо, я попробовал это без везения. По-прежнему та же проблема .. – Eric
ах я вижу, что вы пытаетесь сделать сейчас. Нет, вы не можете отменить битту на поверхности. Следуйте совету Kylotan. –
Вы не можете отменить один графический написанный поверх другого графического любой более вы можете отменить одну меловую иллюстрацию, нарисованную поверх другой иллюстрации мела на той же доске.
Что обычно делается в графике - это то, что вы делаете с доской - очистите всю партию, а в следующий раз только перерисуйте то, что хотите сохранить.
Я думаю, что он спрашивает - как очистить экран? – svineet
Когда я не забочусь о производительности, я использую:
mysurface.fill((0,0,0))
Который нарисует заданный цвет (черный в данном случае) по всей поверхности. Это то, что вы подразумеваете под понятием «ясно»?
О, и вам, разумеется, нужно «перевернуть» поверхность после этого, чтобы она была видимой на экране.
У меня была эта проблема тоже
Для создания поверхности:
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))
, похоже, работает для меня в любом случае.
Если вы хотите сделать 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)
* Извините, это мой английский плохо, все еще учусь
Я использовал следующие в игре я сделал:
self.image = 0 #to empty it
self.image = pygame.image.load("image")
Какой инструментарий вы используете? Tk, Qt, Gtk, WxWidgets? –
TkInter Я думаю, или я не знаю действительно? Я использую pygame для всех своих графических объектов. – Eric
Да, там конечно * есть * способ. –