私は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
が、毎回背景に描かれます。したがって、マウスクリックから描画された円は表示されません。
私の例では、背景を1回塗りつぶして開始し、マウスを下に置くと、背景をもう一度塗りつぶして前の状態を描画してから、円を描画します。
正確な例を使用した別のアプローチは、イベントをチェックするときにマウスの位置のみを記録し、レイヤーが終了するまで円の描画を延期することです。最後のマウスの位置を「覚えて」、ループごとにその円を常に再描画します。
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()
このアプローチの違いは、イベントの変更に応答するだけではなく、常に各ループですべてを描画することです。
アップデート
コメントでの質問に答えて...すべてのマウスクリックを保持するようにその2番目の例を変更する方法は、それらをaに保存し、set
毎回引き戻すことです。
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()