Pic,以便更好地澄清问题: http://imgur.com/a/sbHax
如图所示,我输入了一些文本。我决定退格,但是我输入的新文本与前一个重叠。为什么会这样?在
对pygame来说是新手,而且已经为这个问题困扰太久了:(
请帮忙!我该怎么办
if not cheat:
WIN = pygame.image.load("Assets/winBox.png")
self.SCREEN.blit(WIN, (175, 230))
winRect = pygame.Rect(175, 230, 250, 164)
pygame.display.update(winRect)
done = False
while not done:
self.CLOCK.tick(self.FPS)
mouse = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.STATE = 0
done = True
if 219 <= mouse[0] <= 269 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
# RESTART
self.STATE = 6
done = True
elif 311 <= mouse[0] <= 375 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
# MAIN MENU
self.STATE = 2
done = True
else:
WIN = pygame.image.load("Assets/winBoxWithScore.png")
self.SCREEN.blit(WIN, (175, 230))
winRect = pygame.Rect(175, 230, 250, 164)
pygame.display.update(winRect)
done = False
while not done:
self.CLOCK.tick(self.FPS)
mouse = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.STATE = 0
done = True
if 219 <= mouse[0] <= 269 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
# RESTART
self.STATE = 6
done = True
if 311 <= mouse[0] <= 375 and 366 <= mouse[1] <= 378 and pygame.mouse.get_pressed()[0] == 1:
# MAIN MENU
self.STATE = 2
done = True
elif 290 <= mouse[0] <= 345 and 275 <= mouse[1] <= 325 and pygame.mouse.get_pressed()[0] == 1:
WIN = pygame.image.load("Assets/winBoxBlank.png")
self.SCREEN.blit(WIN, (175, 230))
winRect = pygame.Rect(175, 230, 250, 164)
pygame.display.update(winRect)
name = ""
done = False
while not done:
self.CLOCK.tick(self.FPS)
mouse = pygame.mouse.get_pos()
self.SCREEN.blit(
pygame.font.SysFont('comicsansms', 22).render("Enter your name :", True, Color.black),
(210, 250))
# Textbox
pygame.draw.rect(self.SCREEN, Color.gray, (210, 310, 180, 35), 2)
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.STATE = 0
done = True
# Keyboard events
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
name = name[:-1] # remove last char
elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER:
done = True # break out of the while loop to return name
elif event.key == pygame.K_ESCAPE:
self.menu()
done = True
else:
try:
name += event.unicode # append name
except:
pass
# Limit name to 10 characters
name = name[:10]
# Display characters typed
if len(name) != 0:
self.SCREEN.blit(pygame.font.SysFont('comicsansms', 22).render(name, True, Color.black),(230, 310))
pygame.display.update()
# Store score to the current textfile
p = Player(name, self.numdisks, str(len(self.moveList)))
with open("score.txt", "a") as sfile:
sfile.write("\n" + p.getName() + "\t" + str(p.getLevel()) + "\t" + str(p.getMove()))
# Navigate to the next page
self.STATE = 11
在代码中,每次更新时都要重新绘制文本标签、文本框和名称:
但你没有清除框内的文本。问题是你画的是一个没有填充的矩形。绘制矩形的最后一个参数是宽度。设置为2。所以它画的是一个矩形,但不是填充的。在
https://www.pygame.org/docs/ref/draw.html#pygame.draw.rect
如果你也添加了一个填充矩形(在文本框内),它每次都会清除名称,只填充当前名称。在
^{pr2}$你必须调整x,y,宽度和高度,以适应一个稍小的矩形,以适应外盒
相关问题 更多 >
编程相关推荐