Как запустить функцию при нажатии на изображение в pygame?

#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 под рукой, но я бы посоветовал распечатать координаты мыши и вручную проверить прямоугольные координаты, ширину и длину, чтобы увидеть, где ошибка.