conq_rp
conq_rp

Reputation: 99

Pygame: Checking if button is pressed

I'm working on the start menu for my game in python using pygame, I made a function that detects if the mouse pressed on the position of each button and if it does, it changes the value of a boolean asigned to said button. However the boolean values are not changing.

Here is my code:

import pygame
import sys
import sqlite3 as lite

# questions
option_1 =  option_2 =  option_3 =  option_4 = ''

# misc
initial_pos = 220
event_i = False
event_g = False
event_t = False
event_e = False

...

# Button Settings
button = pygame.image.load("src/trans-button.png")
button = pygame.transform.scale(button, (display_width - 84, 70))

button_start = button_tutorial = button_top10 = button_salir = button

# Game Functions

def checkSelection():
    # We get the mouse coordinates
    mouse_x, mouse_y = pygame.mouse.get_pos()

    # Then proceed to evaluate it's position in relation with the buttons

    if(mouse_x >= 42 and mouse_x <= button.get_width() + 42 and mouse_y >= initial_pos and mouse_y <= initial_pos + button.get_height()):
        event_i = True
    if(mouse_x >= 42 and mouse_x <= button.get_width() + 42 and mouse_y >= initial_pos + button.get_height() + 25 and mouse_y <= initial_pos + button.get_height()*2 + 25):
        event_g = True
    if(mouse_x >= 42 and mouse_x <= button.get_width() + 42 and mouse_y >= initial_pos + button.get_height()*2 + 50 and mouse_y <= initial_pos + button.get_height()*3 + 50):
        event_t = True
    if(mouse_x >= 42 and mouse_x <= button.get_width() + 42 and mouse_y >= initial_pos + button.get_height()*3 + 75 and mouse_y <= initial_pos + button.get_height()*4 + 75):
        event_e = True

...

# Game Loop
while not crashed:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True
        if event.type == pygame.MOUSEBUTTONDOWN:
            checkSelection()
            checkSelection()

    if event_i:
        print 'Begin'
    if event_e:
        print 'It should exit'
        crashed = True

    window.blit(background, (0,0))
    drawAll()
    pygame.display.update()
    clock.tick(60)

#End Game
pygame.quit()
quit()
sys.exit()

The '...' are jumps I made in the code to show you only the parts related to the issues.

The position detection does work, I checked it using 'print' for debbuging.

-- Update --

Accidentally deleted the section where the button was defined.
Also a few typos I made when I returned the code to it's original state.

Upvotes: 2

Views: 3035

Answers (1)

r0the
r0the

Reputation: 612

The problem is that the variables in the checkSelection() function are local variables. You need to declare the variables as global in the function:

def checkSelection():
    global event_i
    global event_t
    # ...

The rules on local vs. global variables in Python are neatly summarised at the official Python Programming FAQ.

P.S. It's not a good idea to use global variables inside functions. I would recommend to define a function that checks only one button area and returns the result, which can be assigned to the (global) variable:

def checkSelection(x, y):
    mouse_x, mouse_y = pygame.mouse.get_pos()
    return x <= mouse_x <= x + button.get_width() and
           y <= mouse_y <= y + button.get_height()

...
event_i = checkSelection(42, 25)
event_t = checkSelection(42, 50)
...

Upvotes: 3

Related Questions