pygame有多个相同的图像

时间:2016-12-31 15:36:00

标签: python image pygame blit

您好我正在尝试为我的塔防游戏创建塔,但每次我选择一个新塔时,旧塔都会被移除。我不希望删除它,我确信有一个简单的方法可以做到这一点,但我找不到它。这是我的代码。谢谢你的帮助。

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 个答案:

答案 0 :(得分:1)

首先,你在while循环之外调用displayTower(),所以它永远不会被执行。所以你一次只有一个塔,而不是两个。

您每次都需要对所有屏幕进行blit或blit其中的一部分并仅更新受更改影响的rects。

是的,你所穿的衣服应该继续保留,但如果没有适当的更新,你就不能指望它。

为了安全起见,您应该使用内部表面,然后在完成blitting和绘图时将其在屏幕表面上进行blit。无论如何,背景变量应该包含什么?屏幕还是表面?

所以第二件事是你永远不会更新屏幕。你必须使用pygame.display.flip()或pygame.display.update()。

并且,确实使用事件来获得鼠标位置,它更聪明。还要添加一个sleep或pygame.time.clock()来调节fps,这几乎是你编写的繁忙循环。