2012-02-15 176 views
2

您將圖像閃爍到表面上以用作背景。然後按下按鈕X在同一表面上拍攝圖像,如何擦除圖像?到目前爲止,我有這個,但最後我在背景中間出現了一個白色的矩形。Pygame擦除背景上的圖像

screen = pygame.display.set_mode(1280, 512) 

screen.blit(background, (0,0)) 

while True: 
    pygame.display.flip() #flip is same as update 
    for event in pygame.event.get(): 
     if (event.type == pygame.KEYDOWN):   
      if event.key == pygame.K_SPACE: 
       screen.blit(player, (x, y)) 
      if event.key == pygame.K_BACKSPACE: 
       pygame.draw.rect(screen, [255,255,255], (x, y, 62,62)) 

回答

3

通常,blit工作流程只是將原始背景接到屏幕上。

在你的代碼,當你開始結合大量的表面的,你可能會想是一個變量或變量列表來跟蹤屏幕狀態,你會使用screen.blit(background, (0,0))

E.g.

初始化背景

objectsonscreen = [] 
objectsonscreen.append(background) 
screen.blit(background, (0,0)) 

加雪碧

objectsonscreen.append(player) 
screen.blit(player, (x, y)) 

清除雪碧

objectsonscreen = [background] 
screen.blit(background, (0,0)) 

here欲瞭解更多關於Pygame中精靈的信息。請注意,如果您的背景不是圖像背景,並且只是純色,您也可以使用screen.fill([0, 0, 0])

+0

您提到了「添加精靈」。我看過這個詞很多。但是這是什麼意思?它僅僅是前景的東西,比背景還小? – Ray 2014-07-03 12:28:37

+0

查看維基百科文章[這裏](http://en.wikipedia.org/wiki/Sprite_(computer_graphics)) – Appleman1234 2014-07-03 21:30:10

4

基本上有兩件事你可以在這裏做。你可以簡單的路線,只是重新繪製背景...

if event.key == pygame.K_BACKSPACE: 
    screen.blit(background, (0,0)) 

或者,如果你希望它是一個小更有效,你可以有塊傳送方法僅繪製背景,該部分玩家形象正在掩蓋。你可以是這樣做的......

screen.blit(background, (x, y), pygame.Rect(x, y, 62, 62)) 

的矩形的第三個參數將導致塊傳輸只繪製的位於位置x「背景」,Y圖像上的62x62像素部。

當然這假定玩家圖像總是在背景之內。如果玩家圖片只與背景部分重疊,我不完全確定會發生什麼。它可能會拋出一個異常,或者它會繞到圖像的另一側。

真的,如果這是一個相當小的項目,第一個選項應該沒問題,但如果您因某種原因擔心性能,請嘗試第二個選項。

+0

如果我選擇了第一個選項,它會覆蓋我的其他圖層(其他圖像blitting到屏幕上)。然而!第二個選項就像一個魅力,謝謝! – rollorox202 2012-02-15 18:48:15