2009-10-28 31 views
6

Có cách nào để xóa một bề mặt khỏi bất cứ thứ gì đã bị thổi vào nó không?Có cách nào để "xóa" bề mặt không?

+3

Bạn đang sử dụng bộ công cụ nào? Tk, Qt, Gtk, WxWidgets? –

+0

TkInter Tôi đoán, hoặc tôi không biết thực sự? Im sử dụng pygame cho tất cả đồ họa của tôi. – Eric

+3

Có, chắc chắn * là * một cách. –

Trả lời

2

Tôi không biết những gì bạn đang sử dụng API, vì vậy đây là một câu trả lời mơ hồ:

Trong hầu hết các trường hợp "giải phóng" một bề mặt đơn giản BLITS một quad màu có cùng kích thước như bề mặt lên nó. Màu sắc được sử dụng là bất cứ điều gì bạn muốn màu sắc rõ ràng của bạn được.

Nếu bạn biết làm thế nào để blit, chỉ cần blit một quad trắng của cùng một kích thước lên bề mặt.

0

Đối pygame bạn có thể sử dụng Surface.fill

+0

Có, tôi có thể sử dụng nó, nhưng đây là phần phức tạp: Bề mặt của tôi đang bị thổi lên bề mặt khác và đang sử dụng cờ SRCALPHA để hỗ trợ độ trong suốt. Nếu tôi đổ đầy toàn bộ bề mặt bằng một màu đồng nhất, toàn bộ bảng trò chơi của tôi sẽ chuyển thành màu đó, vì bề mặt này bị xóa trên mọi thứ .... Và tôi không biết cách giải quyết vấn đề này – Eric

+1

@ Eric, bạn nên thêm những yêu cầu đó vào câu hỏi của bạn –

0

Điền mặt với đầy, sau đó làm cho nó minh bạch với set_alpha

surface.fill 
surface.set_alpha(255) 
+0

Ok Tôi đã thử nó mà không có bất kỳ may mắn nào. Vẫn còn cùng một vấn đề .. – Eric

+0

ah tôi thấy những gì bạn đang cố gắng làm bây giờ. Không, bạn không thể hoàn tác một blit trên bề mặt. Theo lời khuyên của Kylotan. –

2

Bạn không thể hoàn tác một đồ họa được viết trên đầu trang của một đồ họa nào hơn bạn có thể hoàn tác một hình minh họa phấn vẽ trên đỉnh của hình minh họa phấn khác trên cùng một bảng.

Điều thường được thực hiện trong đồ họa là những gì bạn muốn làm với bảng đen - xóa toàn bộ lô và lần tiếp theo chỉ vẽ lại những gì bạn muốn giữ.

+1

Tôi nghĩ đó là những gì anh ta hỏi - Làm thế nào để xóa màn hình? – svineet

2

Khi tôi không quan tâm về hiệu suất, tôi sử dụng:

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

nào sẽ rút ra những màu sắc nào đó (màu đen trong trường hợp này) trên toàn bộ bề mặt. Đó là những gì bạn có nghĩa là "rõ ràng"?

Ồ, và bạn cần, tất nhiên, để "lật" bề mặt sau khi thực hiện việc này để nó hiển thị trên màn hình.

2

Tôi có vấn đề này quá

Để tạo bề mặt:

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

Để xóa bề mặt:

mask.fill 
mask.set_alpha(255) 

Vẽ đường của bạn/images vv

Sau đó blit này bề mặt lên bề mặt chính của bạn bằng cách sử dụng cờ Alpha Blend

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

.fill((255,255,255,0)) vẫn hoạt động đối với tôi.

2

Nếu những gì bạn muốn là làm cho một đối tượng bề mặt "sạch", tức là xóa tất cả các hình ảnh đã bị xóa, hãy ghi hình ảnh mới vào mỗi vòng lặp trò chơi và giữ alpha pixel ngang mà không cần tạo một bề mặt mới, bạn có thể lấp đầy nó, nhưng thay vì một màu cố định, sử dụng một màu trong suốt

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) 

* Xin lỗi là tiếng anh của tôi là xấu, vẫn đang học

0

tôi đã sử dụng sau đây trong một trò chơi tôi đã thực hiện:

self.image = 0 #to empty it 
self.image = pygame.image.load("image") 
Các vấn đề liên quan