您好我正在尝试为我的塔防游戏创建塔,但每次我选择一个新塔时,旧塔都会被移除。我不希望删除它,我确信有一个简单的方法可以做到这一点,但我找不到它。这是我的代码。谢谢你的帮助。
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()
答案 0 :(得分:1)
首先,你在while循环之外调用displayTower(),所以它永远不会被执行。所以你一次只有一个塔,而不是两个。
您每次都需要对所有屏幕进行blit或blit其中的一部分并仅更新受更改影响的rects。
是的,你所穿的衣服应该继续保留,但如果没有适当的更新,你就不能指望它。
为了安全起见,您应该使用内部表面,然后在完成blitting和绘图时将其在屏幕表面上进行blit。无论如何,背景变量应该包含什么?屏幕还是表面?
所以第二件事是你永远不会更新屏幕。你必须使用pygame.display.flip()或pygame.display.update()。
并且,确实使用事件来获得鼠标位置,它更聪明。还要添加一个sleep或pygame.time.clock()来调节fps,这几乎是你编写的繁忙循环。