<p>我修改了您的示例,将存储的文本放在您单击的位置。更改<code>textC</code>时,需要更新<code>text</code>曲面。我还可以在鼠标单击时清除<code>textC</code>缓冲区。你知道吗</p>
<pre><code>from pygame import *
init()
screen = display.set_mode((640, 480))
clock = time.Clock()
running = True
font = font.SysFont("comicsansms", 72) # Default font
textC = "a" # Stores user input
text = font.render(textC, True, (255,0,0)) # Render Text
pos = None # store mouse click location
while running:
mx, my = mouse.get_pos()
mb = mouse.get_pressed()
for e in event.get():
if e.type == QUIT:
running = False
if e.type == KEYDOWN:
print(textC)
if key.get_pressed()[K_BACKSPACE]:
textC = textC[:-1] # removes last letter
else:
textC += e.unicode # adds letter
# need to update the text surface:
text = font.render(textC, True, (255,0,0)) # Render Text
elif e.type == MOUSEBUTTONDOWN:
pos = mouse.get_pos()
locked_text = font.render(textC, True, (0,255,0))
textC = ""
text = font.render(textC, True, (255,0,0)) # Clear text
screen.fill((255, 255, 255)) #fill screen white
if pos:
screen.blit(locked_text, pos)
screen.blit(text, (mx, my)) # display text
display.flip()
clock.tick(60)
quit()
</code></pre>
<p>如果希望文本持久化,则需要创建文本表面及其位置的列表,然后在每一帧中遍历它们。在这种情况下,可能值得考虑<a href="https://www.pygame.org/docs/ref/sprite.html" rel="nofollow noreferrer">Sprites</a>。你知道吗</p>