绘制顺序覆盖 Mousedown 事件绘制的图像

问题描述

我有以下工作程序。单击时,图像在该位置绘制但立即消失,因为它仅在鼠标按下事件时绘制。我希望图像在鼠标按下事件结束后永久保留在屏幕上。

import pygame

BLUE = (0,255)
BLACK = (255,255,255)

pygame.init()
screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

all_sprites = pygame.sprite.Group()
player_image = pygame.image.load('Player.png').convert()
start_rect = player_image.get_rect()
image_rect = start_rect

running = True
while running:
    # keep running at right fps
    clock.tick(30)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            print("Item created at (%d,%d)" % event.pos)
            screen.blit(player_image,(event.pos[0],event.pos[1]))

    all_sprites.update()
    screen.fill(BLUE)

    all_sprites.draw(screen)

    # nachdem alles gezeichnet ist flip display
    pygame.display.flip()

pygame.quit()

我可以将事件块放在 screen.fill(BLUE) 下方,然后图像会停留几毫秒,但两个选项都不会永久显示播放器图像。

感谢您的帮助。

解决方法

您必须将位置存储到变量 (player_position) 中。设置变量时在主应用程序循环中绘制图像:

player_position = None

running = True
while running:
    # keep running at right fps
    clock.tick(30)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            print("Item created at (%d,%d)" % event.pos)
            player_position = event.pos

    all_sprites.update()
    screen.fill(BLUE)

    all_sprites.draw(screen)

    if player_position != None:
        screen.blit(player_image,player_position)

    # nachdem alles gezeichnet ist flip display
    pygame.display.flip()

pygame.quit()