Python 输入文本上的Pygame退格键未清除。而是重叠/
为了更清楚地了解问题,请参见图片: 如图所示,我输入了一些文本。我决定退格,但我输入的新文本与前一个文本重叠。为什么会这样 pygame新手,且已被此问题困扰太久:( 请帮忙!我该怎么办Python 输入文本上的Pygame退格键未清除。而是重叠/,python,pygame,Python,Pygame,为了更清楚地了解问题,请参见图片: 如图所示,我输入了一些文本。我决定退格,但我输入的新文本与前一个文本重叠。为什么会这样 pygame新手,且已被此问题困扰太久:( 请帮忙!我该怎么办 if not cheat: WIN = pygame.image.load("Assets/winBox.png") self.SCREEN.blit(WIN, (175, 230)) winRect = pygame.Rect(175, 230, 250
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
如果不作弊:
WIN=pygame.image.load(“Assets/winBox.png”)
自我筛选。blit(赢,(175230))
winRect=pygame.Rect(175230250164)
pygame.display.update(winRect)
完成=错误
虽然没有这样做:
self.CLOCK.tick(self.FPS)
mouse=pygame.mouse.get_pos()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
self.STATE=0
完成=正确
如果代码中有219,则每次更新时都会重新绘制文本标签、文本框和名称:
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)
但您没有清除内部的文本框。问题是您正在绘制一个未填充的矩形。绘制矩形的最后一个参数是宽度。您将其设置为2。因此它正在绘制一个未填充的矩形
如果您还添加了一个填充矩形(对于文本框内部),则每次都会清除该名称,并仅使用当前名称填充该名称
pygame.draw.rect(self.SCREEN, color_of_your_choice, (212, 312, 176, 31))
您必须调整x、y、宽度和高度,以适应外部框中稍微小一点的矩形如果旧文本没有清除,那么我想它不会像应该的那样更新。您是否在删除字符时更新文本框?