Создание кнопки в python - PullRequest
6 голосов
/ 27 января 2020

Я пытаюсь сделать интерактивную игру для детей с особыми потребностями, где вы нажимаете на кнопку, и она перемещает фотографию дальше. Однако мне нужна некоторая помощь, потому что когда я запускаю свой код, консоль печатает «...», как и при нажатии на кнопку, а когда вы нажимаете вдали от кнопок, это не так. Там все работает. Независимо от того, где вы нажимаете кнопку выше или ниже, она распознает ее как кнопку. Таким образом, он не может различить guish столбец координат y как не являющийся частью координат кнопки. Помощь будет оценена! Смотрите фотографии: [Окно игры] [1] ... Код:

import pygame
import random

pygame.init()
#define variables
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
background_colour = (255, 255, 255)
(width, height) = (700, 500)
x = 250
y = 100
mpos = pygame.mouse.get_pos()
mpress = pygame.mouse.get_pressed()
Button1 = 'photos/buttonCow.png'
Button2 = 'photos/buttonDuck.png'
Button3 = 'photos/buttonHorse.png'
Button4 = 'photos/buttonSheep.png'

imageOption1 = pygame.image.load(Button1)
imageOption2 = pygame.image.load(Button2)
imageOption3 = pygame.image.load(Button3)
imageOption4 = pygame.image.load(Button4)


screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Game!')
screen.fill(background_colour)
running = True


def buttons():
    if pygame.mouse.get_pos() >= (200, 400):
        if pygame.mouse.get_pos() <= (260, 430):
            print("horse")
    if pygame.mouse.get_pos() >= (300, 400):
        if pygame.mouse.get_pos() <= (360, 430):
            print("duck")
    if pygame.mouse.get_pos() >= (400, 400):
        if pygame.mouse.get_pos() <= (460, 430):
            print("cow")
    if pygame.mouse.get_pos() >= (500, 400):
        if pygame.mouse.get_pos() <= (560, 430):
            print("sheep")


def displayOptions():
    screen.blit(imageOption1, (400, 400))
    screen.blit(imageOption2, (300, 400))
    screen.blit(imageOption3, (200, 400))
    screen.blit(imageOption4, (500, 400))


def whichAnimalFunc():
    whichAnimal = random.randint(0, 4)
    if whichAnimal == 1:
        image = pygame.image.load('photos/cow.png')
        screen.fill(WHITE)
        screen.blit(image, (x, y))
        displayOptions()
        pygame.display.update()
    if whichAnimal == 2:
        image = pygame.image.load('photos/duck.png')
        screen.fill(WHITE)
        screen.blit(image, (x, y))
        displayOptions()
        pygame.display.update()
    if whichAnimal == 3:
        image = pygame.image.load('photos/horse.png')
        screen.fill(WHITE)
        screen.blit(image, (x, y))
        displayOptions()
        pygame.display.update()
    elif whichAnimal == 4:
        image = pygame.image.load('photos/sheep.jpg')
        screen.fill(WHITE)
        screen.blit(image, (x, y))
        displayOptions()
        pygame.display.update()
    else:
        pygame.QUIT


while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False  # allows quit button to work
        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            print(pos)
            buttons()
            whichAnimalFunc()
            pygame.display.update()```



  [1]: https://i.stack.imgur.com/xDCa0.png

Ответы [ 2 ]

4 голосов
/ 27 января 2020

Вы должны проверить координаты отдельно. И не забывайте размер кнопки:

mx, my = pygame.mouse.get_pos()
if mx >= 200 and my >= 400 and mx < 200 + imageOption3.get_width() and my < 400 + imageOption3.get_height():
    print("horse")

Также вы можете сократить весь объект, используя список (если вы не знакомы с объектами):

gameData = [
# (buttonX, buttonY, name) - will be extended by button image
[400, 400, 'Cow'],
[500, 400, 'Duck'],
#...
]

# load buttons:
for item in gameData:
    item.append(pygame.image.load("photos/button%s.png"%item[2]))

def displayOptions():
    for button in gameData:
        screen.blit(button[3], (button[0], button[1]))

def buttons():
    mx, my = pygame.mouse.get_pos()
    for button in gameData:
        bx, by = button[0], item[1]
        bw, bh = button[3].get_size()
        if mx >= bx and my >= by and mx < bx+bw and my < by+bh:
            print(button[2])

# etc.
3 голосов
/ 27 января 2020

Вы не можете просто сказать pygame.mouse.get_pos() >= (200, 400), вы должны сказать:

mouse_pos = pygame.mouse.get_pos()
if mouse[0] >= 200 and mouse[1] >= 400:
   # hovering
...