2016-12-31 31 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