Как обнаружить курсор мыши на изображении (круговом) в Pygame - PullRequest
0 голосов
/ 20 октября 2018

Мне нужно увеличить изображение, если оно обнаруживает наведение мыши, но я не знаю, как это сделать.Я думаю, что это трудно обнаружить, используя pygame.mouse.get_pos() и изображение rect, потому что изображение представляет собой круг, а не прямоугольник.Он может обнаружить наведение мыши, хотя мышь находится в углу изображения, не касаясь его.

1 Ответ

0 голосов
/ 20 октября 2018

Вы можете использовать теорему Пифагора для вычисления расстояния между мышью и центром круга или просто math.hypot.Если расстояние меньше радиуса, мышь и круг сталкиваются.

Кроме того, создайте прямоугольник для изображения, которое служит позицией блика и облегчает получение центраточка.

import math
import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')

radius = 60  # Circle radius.
IMAGE = pg.Surface((120, 120), pg.SRCALPHA)
pg.draw.circle(IMAGE, (225, 0, 0), (radius, radius), radius)
# Use this rect to position the image.
rect = IMAGE.get_rect(center=(200, 200))

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
        elif event.type == pg.MOUSEMOTION:
            mouse_pos = event.pos  # Or `pg.mouse.get_pos()`.
            # Calculate the x and y distances between the mouse and the center.
            dist_x = mouse_pos[0] - rect.centerx
            dist_y = mouse_pos[1] - rect.centery
            # Calculate the length of the hypotenuse. If it's less than the
            # radius, the mouse collides with the circle.
            if math.hypot(dist_x, dist_y) < radius:
                print('collision')

    screen.fill(BG_COLOR)
    screen.blit(IMAGE, rect)
    pg.display.flip()
    clock.tick(60)

pg.quit()

Вы также можете использовать маски для точного обнаружения столкновений с пикселями или pygame.sprite.collide_circle, если вы имеете дело со спрайтами.

...