Можно ли поместить изображение в Pygame при нажатии кнопки мыши? - PullRequest
0 голосов
/ 16 сентября 2018

Итак, у меня есть проблема, которую я не могу решить с помощью поиска или моих собственных знаний.

В основном, у меня есть программа, которая заставляет изображение (в данном случае ball_r.gif) следоватькурсор мыши(программа ниже)

import pygame as pg




pg.init()
# use an image you have (.bmp  .jpg  .png  .gif)
image_file = "ball_r.gif"



black = (0,0,0)
sw = 800
sh = 800



screen = pg.display.set_mode((sw, sh))
pg.display.set_caption('testprogram')
image = pg.image.load(image_file).convert()



start_rect = image.get_rect()
image_rect = start_rect
running = True
while running:
    event = pg.event.poll()
    keyinput = pg.key.get_pressed()
    if keyinput[pg.K_ESCAPE]:
        raise SystemExit
    elif event.type == pg.QUIT:
        running = False
    elif event.type == pg.MOUSEMOTION:
        image_rect = start_rect.move(event.pos)

    screen.fill(black)
    screen.blit(image, image_rect)
    pg.display.flip()

По сути, я хочу иметь возможность при нажатии левой кнопки мыши поместить это изображение в место, где был нажат курсор - но главное - это то, что мне нужночтобы иметь возможность разместить столько, сколько я хочу, и при этом изображение будет следовать за курсором.

Я надеюсь, что это возможно ...

_MouseBatteries

1 Ответ

0 голосов
/ 16 сентября 2018

Ключ в том, чтобы создать еще один Surface объект с отпечатанными изображениями.Я предоставил рабочий код.Я также немного почистил.

import pygame as pg

pg.init()

# use an image you have (.bmp  .jpg  .png  .gif)
image_file = "ball_r.gif"

black = (0,0,0)
sw = 800
sh = 800

screen = pg.display.set_mode((sw, sh))
pg.display.set_caption('testprogram')
image = pg.image.load(image_file).convert()

start_rect = image.get_rect()
image_rect = start_rect
running = True

stamped_surface = pg.Surface((sw, sh))

while running:
    event = pg.event.poll()
    keyinput = pg.key.get_pressed()

    if keyinput[pg.K_ESCAPE]:
        raise SystemExit

    elif event.type == pg.QUIT:
        running = False

    elif event.type == pg.MOUSEMOTION:
        image_rect = start_rect.move(event.pos)

    elif event.type == pg.MOUSEBUTTONDOWN:
        stamped_surface.blit(image, event.pos)

    screen.fill(black)
    screen.blit(stamped_surface, (0, 0))
    screen.blit(image, image_rect)
    pg.display.flip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...