#python #pygame
#python #pygame
Вопрос:
Как бы вы запустили функцию при нажатии на изображение в pygame? В моей программе я хочу запускать определенную функцию при нажатии на определенное изображение. Проблема в том, что я понятия не имею, как это сделать. Возможно ли это вообще? Вот мой код ниже…
import pygame
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)
pygame.init()
size = (500, 400)
screen = pygame.display.set_mode(size)
pygame.draw.rect(screen, red,(150,450,100,50))
button1 = pygame.Rect(100,100,50,50)
button2 = pygame.Rect(200,200,50,50)
button3 = pygame.Rect(130,250,50,50)
pygame.display.set_caption("Yami no Game")
txt = pygame.image.load('txt.png')
Stxt = pygame.transform.scale(txt,(48,48))
exe = pygame.image.load('exe.jpg')
Sexe = pygame.transform.scale(exe,(48,48))
done = False
clock = pygame.time.Clock()
background_image=pygame.image.load('windows_background.jpg').convert()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.MOUSEBUTTONDOWN:
100, 100 = event.pos
if Sexe.get_rect().collidepoint(100,100):
print('Runnig thing')
screen.blit(background_image, [0,0])
screen.blit(Stxt,[100,100])
screen.blit(Sexe,[250,250])
pygame.display.update()
clock.tick(60)
pygame.quit()
Ответ №1:
Определить щелчок мыши, затем проверить положение мыши, когда произошел щелчок, и посмотреть, было ли это внутри изображения, используя функцию collidepoint:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.MOUSEBUTTONDOWN:
mousePos = pygame.mouse.get_pos()
if Sexe.get_rect().collidepoint(mousePos):
runFunction()
Ответ №2:
В общем, вы говорите об использовании кнопки для выполнения чего-либо. Для этого нам нужно знать, куда игрок нажал мышью, проверить, находится ли это внутри области, на которой изображено изображение (наша «кнопка»), и если да, выполнить функцию. Вот небольшой пример:
# get the mouse clicks
mouse = pygame.mouse.get_pos() # position
click = pygame.mouse.get_pressed() # left/right click
if img.x img.width > mouse[0] > img.x and img.y img.height > mouse[1] > img.y: # Mouse coordinates checking.
if click[0] == 1: # Left click
my_function_on_click()
Для этого требуется, чтобы ваш объект изображения имел x
и y
координаты, а также определенное height
и width
. Это намного проще, если ваш объект изображения имеет прямоугольную форму того же размера, что и вы можете вызвать в этой прямой форме, или, как указано в другом ответе, используйте collidepoint
функцию.
Минимальный пример с использованием кода, который вы скопировали в комментарии:
width = 48
height = 48
x = 100
y = 100
exe = pygame.image.load('exe.jpg')
Sexe = pygame.transform.scale(exe,(width,height))
while not done:
screen.blit(Sexe,[x,y]) # blit image
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
mouse = pygame.mouse.get_pos()
position click = pygame.mouse.get_pressed() # left/right click
# Mouse coordinates checking:
sexe_rect = Sexe.get_rect()
if sexe_rect.x sexe_rect.width > mouse[0] > sexe_rect.x and sexe_rect.y sexe_rect.height > mouse[1] > sexe_rect.y:
# if Sexe.get_rect().collidepoint(mousePos): # Alternative, A LOT shorter and more understandable
if click[0] == 1: # Left click
print("I GOT CLICKED!")
Комментарии:
1. Извините, я немного новичок в этом, это должно выглядеть так? Потому что существует недопустимая синтаксическая ошибка
2. « пока не выполнено: для события в pygame.event.get(): если event.type == pygame. ЗАВЕРШЕНИЕ: готово = True mouse = pygame.mouse.get_pos() # щелчок по позиции = pygame.mouse.get_pressed() # щелчок левой / правой кнопкой мыши, если это необходимо.[100] Sexe. (48) > мышь[0] > Сексе.[100] и Сексе.[100] Сексе. (48) > мышь[1] > Секс.[100]: # Проверка координат мыши. если щелкнуть [0] == 1: # Щелкните левой кнопкой мыши runFunction() #проигнорируйте это
3. Я отредактировал свой пост и включил оба варианта — проверка вручную с помощью width / height или проверка с помощью
collidepoint
, как предлагалось в другом ответе.4. Спасибо за вашу помощь, однако ничего не происходит, когда я нажимаю на картинку. Я также использовал
collidepoint
функцию.5. На данный момент у меня нет python под рукой, но я бы посоветовал распечатать координаты мыши и вручную проверить прямоугольные координаты, ширину и длину, чтобы увидеть, где ошибка.