Есть ли способ получить координаты указанного c объекта / щелчка в pygame? - PullRequest
2 голосов
/ 05 мая 2020

Я хочу написать программу, в которой, если я щелкну, на экране pygame будет нарисован круг. Если я щелкну еще раз, будет нарисован еще один круг, а также линия, соединяющая его с предыдущим нарисованным кругом. Есть ли способ отследить координаты места последнего нажатия?

ps. Я хочу создать эффект созвездия звезды после многих щелчков мышью (чтобы помочь вам визуализировать)

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Добавить список для позиций мыши:

points = []

Добавить позицию в список при щелчке мыши:

if e.type == MOUSEBUTTONDOWN:
    if e.button == 1:
        points.append(e.pos)    

Нарисуйте точки в al oop:

for pos in points:
   draw.circle(screen,GREEN, pos, 10)

Если есть хотя бы 2 точки, то линии между точками можно нарисовать с помощью pygame.draw.lines():

if len(points) > 1:
    draw.lines(screen, GREEN, False, points)

На основе вашего предыдущего вопроса , Я предлагаю следующее:

from pygame import * 

init()
size = width, height = 650, 650
screen = display.set_mode(size)

BLACK = (0, 0, 0)
GREEN = (0, 255, 0)

running = True
myClock = time.Clock()
points = []

# Game Loop
while running:
    for e in event.get(): 
        if e.type == QUIT:
            running = False
        if e.type == MOUSEBUTTONDOWN:
            if e.button == 1:
                points.append(e.pos) 
            if e.button == 3:      
                points = []

    screen.fill(BLACK)

    if len(points) > 1:
        draw.lines(screen, GREEN, False, points)
    for pos in points:
        draw.circle(screen,GREEN, pos, 10)

    display.flip()
    myClock.tick(60)

quit()

В качестве альтернативы позиция щелчка может быть сохранена (prev_pos) и использована в следующий раз , когда щелкают мышью, чтобы нарисовать линию.
Я не рекомендую это, потому что вы потеряете информацию о нажатых позициях:

from pygame import * 

init()
size = width, height = 650, 650
screen = display.set_mode(size)

BLACK = (0, 0, 0)
GREEN = (0, 255, 0)

running = True
myClock = time.Clock()
prev_pos = None

# Game Loop
while running:
    for e in event.get(): 
        if e.type == QUIT:
            running = False
        if e.type == MOUSEBUTTONDOWN:
            if e.button == 1:
                if prev_pos != None:
                    draw.line(screen, GREEN, prev_pos, e.pos)
                prev_pos = e.pos
                draw.circle(screen, GREEN, e.pos, 10)
            if e.button == 3:     
                prev_pos = None 
                screen.fill(BLACK))

    display.flip()
    myClock.tick(60)

quit()
1 голос
/ 05 мая 2020

Думаю, это решит вашу проблему: https://www.pygame.org/docs/ref/mouse.html

"pygame.mouse.get_pos () получить позицию курсора мыши get_pos () -> (x, y)

Returns the X and Y position of the mouse cursor. The position is relative to the top-left corner of the display. The cursor position can be located outside of the display window, but is always constrained to the screen."

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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...