<p>首先,您没有正确捕捉鼠标事件。使用<code>MOUSEBUTTONDOWN</code>事件的方式与使用<code>KEYDOWN</code>键事件的方式相同,然后使用<code>mouse.get_pressed</code>来知道正在按下哪个鼠标按钮。你知道吗</p>
<p>第二,问题是每次<code>screen.fill</code>执行时,所有的表面都会被擦除,因此有必要以某种方式跟踪文本和呈现文本的位置。它可以是一个列表。你知道吗</p>
<p>所以你的代码看起来像这样</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
text_rendered = []
def rerender_text():
for surface, pos in text_rendered:
screen.blit(surface, pos) # display text
while running:
screen.fill((255, 255, 255)) # fill screen white
mx, my = mouse.get_pos()
for e in event.get():
if e.type == QUIT:
running = False
if e.type == KEYDOWN:
keys = list(key.get_pressed())
index = keys.index(1)
if key.get_pressed()[K_BACKSPACE]:
textC = textC[:-1] # removes last letter
else:
textC += e.unicode # adds letter
if e.type == MOUSEBUTTONDOWN:
if mouse.get_pressed()[0]: # Left click
screen.blit(text, (mx, my)) # display text
# save the text and the position for rerendering
text_rendered.append((text,(mx,my)))
text = font.render(textC, True, (255, 0, 0)) # Render Text
rerender_text()
screen.blit(text, (mx, my)) # display text
display.flip()
clock.tick(60)
quit()
</code></pre>