Pygame文本矩形重叠

时间:2016-01-20 22:43:14

标签: python pygame

这是我的代码:

import pygame
import time
pygame.init()

display_width = 800
display_height = 600
window = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('Draw')
clock = pygame.time.Clock()
p1Img = pygame.image.load('player.png')
p2Img = pygame.image.load('player2.png')
bullet = pygame.image.load('bullet.png')
id = 1

white = (255,255,255)
black = (0,0,0)






def player(x,y):
    window.blit(p1Img,(p1x,p1y))

def player2(x,y):
    window.blit(p2Img,(p2x,p2y))

def text_objects(text,font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()



def messageDisplay(text):
    largeText = pygame.font.Font('freesansbold.ttf',115)
    TextSurf, TextRect = text_objects(text,largeText)
    TextRect.center = (display_width/2, display_height/2)
    window.blit(TextSurf,TextRect)

    pygame.display.update()

def countDown(drawTime):
    while drawTime <= 5:
        time.sleep(1)
        pygame.display.update()
        messageDisplay(str(drawTime))
        drawTime += 1
    else:
        pygame.display.update()
        messageDisplay('Draw')



p1x = -5
p1y = 500
b1x = 56
b1y = 510

p2x = 740
p2y = 500
b2x = 740
b2y = 500

while(id != 0):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            id = 0
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_q:
                window.blit(bullet,(b1x, b1y))
                pygame.display.update()
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_q:
                window.blit(bullet,(b1x, b1y))


    window.fill(white)
    player(p1x,p1y)
    player2(p2x,p2y)
    pygame.display.update()
    countDown(1)
    clock.tick(120)

pygame.quit()

问题在于文本是否超越了自身。我已经阅读了无数关于如何重绘表面的事情,但我不完全确定它们是什么意思?我做了window.fill(白色),但似乎并没有这样做。

1 个答案:

答案 0 :(得分:0)

您在while循环中绘制并且在绘制新文本之前不要清除此位置。在绘制新文本之前,您必须使用背景颜色或背景图像填充此位置。可能您可以使用fill(white, TextRect)填充(清除)屏幕的一部分。

您在window.fill(white)中使用while但不在countDown循环内部,因此在完成计数后会清除文本(以及所有屏幕)。

redraw表示&#34;清除屏幕并再次绘制所有内容&#34;。要清除屏幕,请使用fill(white)

我不知道你要做什么 - 但是sleepwhilecountDown)可能不是一个好主意。