[英]Pygame Text Rectangles Overlapping
this is my code: 这是我的代码:
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()
The problem is that the text draws over itself. 问题在于文本是在其自身之上绘制的。 I've read countless things about how I need to redraw the surface but I'm not entirely sure what they mean?
我已经阅读了无数有关如何重绘表面的内容,但我不确定它们的含义是什么? I did window.fill(white) but that doesn't seem to do it.
我做了window.fill(white),但似乎没有做到。
You draw in while
loop and you don't clear this place before you draw new text. 您绘制
while
循环,并且在绘制新文本之前不会清除此位置。 You have to fill this place with background color or background image before you draw new text. 在绘制新文本之前,必须用背景颜色或背景图像填充此位置。 Probably you could use
fill(white, TextRect)
to fill (clear) only part of screen. 可能您可以使用
fill(white, TextRect)
)仅填充(清除)部分屏幕。
You use window.fill(white)
but not inside of while
loop in countDown
so it clears text (and all screen) after you finish counting. 您使用
window.fill(white)
但不使用countDown
的while
循环,因此在完成计数后它会清除文本(和所有屏幕)。
redraw
means "clear screen and draw everything again". redraw
意味着“清除屏幕并再次绘制所有内容”。 To clear screen you use fill(white)
要清除屏幕,请使用
fill(white)
I don't know what you are trying to do - but sleep
and while
(in countDown
) probably is not good idea. 我不知道您要尝试做什么-但
sleep
( while
在countDown
)可能不是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.