Вы можете использовать Surface.get_at () , чтобы проверить цвет пикселя, на котором щелкает мышь. Если это цвет фона (белый в вашем случае), вы рассматриваете его снаружи, в противном случае - внутри и запускаете действие.
Вот рабочий пример. Функция insideimage
проверяет, что щелчок находится внутри поверхности button
(прямоугольник), и проверяет цвет пикселя в координатах мыши. Возвращает True
, если щелчок находится внутри поверхности, а цвет не белый.
Это работает, если цвет фона больше не используется внутри изображения.
import sys
import pygame
SCREENWIDTH = 500
SCREENHEIGHT = 500
pygame.init()
screen = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT))
button = pygame.image.load("button1.png")
screen.blit(button, (100, 100))
def insideimage(pos, rsurf, refcolor):
"""rsurf: Surface which contains the image
refcolor: background color, if clicked on this color returns False
"""
refrect = rsurf.get_rect().move((100, 100))
pickedcol = screen.get_at(pos)
return refrect.collidepoint(pos) and pickedcol != refcolor
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.MOUSEBUTTONUP:
valid = insideimage(event.pos, button, (255, 255, 255, 255))
#(255, 255, 255, 255) this is color white with alpha channel opaque
print(valid)
pygame.display.update()