2009-10-28 2 views
6

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

+3

Какой инструментарий вы используете? Tk, Qt, Gtk, WxWidgets? –

+0

TkInter Я думаю, или я не знаю действительно? Я использую pygame для всех своих графических объектов. – Eric

+3

Да, там конечно * есть * способ. –

ответ

2

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

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

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

0

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

+0

Да, я мог бы использовать его, но вот сложная часть: Моя поверхность расплывается на другой поверхности и использует флаг SRCALPHA для поддержки прозрачности. Если я заполняю всю поверхность сплошным цветом, вся моя игровая доска превратится в этот цвет, так как эта поверхность расплывается во всем .... И я не знаю, как решить эту проблему – Eric

+1

@ Эрик, вы должны добавить эти требования к вашему вопросу –

0

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

surface.fill 
surface.set_alpha(255) 
+0

Хорошо, я попробовал это без везения. По-прежнему та же проблема .. – Eric

+0

ах я вижу, что вы пытаетесь сделать сейчас. Нет, вы не можете отменить битту на поверхности. Следуйте совету Kylotan. –

2

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

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

+1

Я думаю, что он спрашивает - как очистить экран? – svineet

2

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

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

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

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

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)) 
1

.fill((255,255,255,0)), похоже, работает для меня в любом случае.

2

Если вы хотите сделать 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) 

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

0

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

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