2016-12-31 33 views
0

你好,我正在嘗試爲塔防遊戲創建塔,但每次我選擇一個新塔時,舊塔會被移除。我不希望這被刪除,我相信有一個簡單的方法來做到這一點,但我找不到它。這是我的代碼。感謝您的任何幫助。pygame有多個相同的圖像

def displayTower(): 
    global bx, by 
    click = pygame.mouse.get_pressed() 
    Background.blit(redTower, (mx-bx,my-by)) 
    Background.blit(redTower, (530,650)) 

while intro == 1: 
    mousePos = pygame.mouse.get_pos() 
    mousePressed = pygame.mouse.get_pressed() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 

     if 530 < mousePos[0] < 590 and 650 < mousePos[1] < 710: 
      if mousePressed[0] == 1: 
       clicked = True 
     if clicked == True: 
      mx, my = pygame.mouse.get_pos() 
      bx = 30 
      by = 30 
      if mousePressed[0] == 0: 
       Background.blit(redTower, (mx-bx,my-by)) 
       tx = mx - bx 
       ty = my - by 
       clicked = False 
displayTower() 

回答

1

首先,你在while循環之外調用displayTower(),所以它永遠不會被執行。所以你一次只有一個塔,而不是兩個。

您每次都必須將所有屏幕刷新或刷新其中的一部分,並僅更新受該更改影響的矩形。

是的,你應該堅持下去,但是如果沒有適當的更新,你就不能指望它。

爲了安全起見,您應該使用內部表面,然後在完成blitting和繪圖時將其覆蓋在屏幕表面上。無論如何,背景變量應該包含什麼?屏幕或你的表面?

所以第二件事是你永遠不會更新屏幕。您必須使用pygame.display.flip()或pygame.display.update()。

而且,使用事件來獲取鼠標位置,它更聰明。還要添加睡眠或pygame.time.clock()來調節fps,這幾乎是一個繁忙的循環,你寫的。

+0

還有更多的代碼和displayTower()在我的代碼中的while循環我只是在提出問題時出錯,並且有pygame.display.update()以及 –

+0

葉背景只是地圖對於塔防遊戲 –

+0

首先使用事件而不是拔出鼠標狀態。然後回來一個更好的代碼。那麼你也需要,screen.blit(background,(0,0)); pygame.display.flip() – Dalen