gpt4 book ai didi

python - 为什么pygame不会画圆?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:05 25 4
gpt4 key购买 nike

我是python的初学者,我想在鼠标所在的地方画一个圆圈(我也有鼠标和背景图)。这是我的代码:

while True:

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit

if event.type == MOUSEBUTTONDOWN:
color = (100,100,100)
posx,posy = pygame.mouse.get_pos()
screen.lock()
pygame.draw.circle(screen, color, (posx,posy), 50)
screen.unlock()

screen.blit(background,(0,0))
x,y = pygame.mouse.get_pos()
x -= mousec.get_width()/2
y -= mousec.get_height()/2

screen.blit(mousec, (x,y))

pygame.display.update()

每当我点击时什么都没有发生。为什么不画一个圆?感谢您的帮助!

最佳答案

我对 pygame 几乎一无所知,所以我不能提供比这更多的帮助......但我认为你所做的总是在你的圈子上退缩。试试这个:

pygame.init()
screen = pygame.display.set_mode((640, 480))

screen.fill((0,0,0))

while True:

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()

if event.type == MOUSEBUTTONDOWN:
# draw background first (however)
screen.fill((0,0,0))

# draw your other layers (mouse image)

# draw the circle
color = (255,255,255)
posx,posy = pygame.mouse.get_pos()
pygame.draw.circle(screen, color, (posx,posy), 50)

pygame.display.update()

基本上,在您的示例中发生的事情是,当您按下鼠标事件进行绘制时,您将再次绘制背景。我不确定 mousec 是什么,但每次都会在背景上绘制。所以你永远不会看到鼠标点击画出的圆圈

我的例子一开始填充背景一次,然后当有鼠标按下时,它会再次填充背景以覆盖之前的状态,然后绘制圆圈。

另一种方法,使用您的确切示例,是仅在检查事件时记录鼠标位置,并将圆的绘制推迟到图层之后。您会“记住”最后一次鼠标位置,以便在每个循环中不断重绘该圆圈:

last_mouse_pos = None

while True:

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit

if event.type == MOUSEBUTTONDOWN:
last_mouse_pos = pygame.mouse.get_pos()

elif event.type == KEYDOWN and event.unicode == 'c':
# clear the circle when pressing the 'c' key
last_mouse_pos = None

screen.blit(background,(0,0))
x,y = pygame.mouse.get_pos()
x -= mousec.get_width()/2
y -= mousec.get_height()/2

screen.blit(mousec, (x,y))

if last_mouse_pos:
color = (100,100,100)
posx,posy = last_mouse_pos
pygame.draw.circle(screen, color, (posx,posy), 50)

pygame.display.update()

这种方法的不同之处在于,您总是在每个循环中绘制所有内容,而不是仅响应事件的变化。

更新

针对您在评论中提出的问题...修改第二个示例以保留所有鼠标点击的方法是将它们保存在集合 中并每次都将它们拉回。

mouse_clicks = set()

while True:

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit

if event.type == MOUSEBUTTONDOWN:
mouse_clicks.add(pygame.mouse.get_pos())

elif event.type == KEYDOWN and event.unicode == 'c':
# clear the circle when pressing the 'c' key
mouse_clicks.clear()

screen.blit(background,(0,0))
x,y = pygame.mouse.get_pos()
x -= mousec.get_width()/2
y -= mousec.get_height()/2

screen.blit(mousec, (x,y))

for pos in mouse_clicks:
color = (100,100,100)
posx,posy = pos
pygame.draw.circle(screen, color, (posx,posy), 50)

pygame.display.update()

关于python - 为什么pygame不会画圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com