Проблема меню с событием PyGame MOUSEBUTTONDOWN - PullRequest
0 голосов
/ 21 апреля 2011

Да, этот заголовок был написан не совсем правильно.

Хорошо, вот что у нас есть - программа на Python, использующая библиотеку pyGame, и мы создаем игру. Мы начинаем в меню меню main.py. Когда пользователь нажимает на одну из кнопок меню, выполняется действие. Программа проверяет клики по пунктам меню, используя следующий код:

if event.type == pygame.MOUSEBUTTONDOWN:
            mousePos = pygame.mouse.get_pos()
            for item in buttons: # For each button
                X = item.getXPos() # Check if the mouse click was...
                Y = item.getYPos() # ...inside the button
                if X[0] < mousePos[0] < X[1] and Y[0] < mousePos[1] < Y [1]:
                    # If it was
                    item.action(screen) # Do something

Когда пользователь нажимает кнопку «Играть в игру», он открывает подмодуль playGame.py. В этом подмодуле есть еще один цикл pyGame и т. Д.

Часть игры состоит в том, чтобы удерживать левую кнопку мыши, чтобы «вырастить» круги из текущей позиции (это игра-головоломка, и она имеет смысл в контексте). Вот мой код для этого:

mouseIsDown == False
r = 10
circleCentre = (0,0)

[...other code...]

if mouseIsDown == True:
    # This grown the circle's radius by 1 each frame, and redraws the circle
    pygame.draw.circle(screen, setColour(currentColourID), circleCentre, r, 2)
    r += 1

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        runningLevel = False

    elif event.type == pygame.MOUSEBUTTONDOWN:
        # User has pressed mouse button, wants to draw new circle
        circleCentre = pygame.mouse.get_pos()
        mouseIsDown = True

    elif event.type == pygame.MOUSEBUTTONUP:
        # Stop drawing the circle and store it in the circles list
        mouseIsDown = False
        newCircle = Circle(circleCentre, r, currentColourID)
        circles.append(newCircle)
        circleCount += 1
        r = 10 # Reset radius

Проблема, с которой я столкнулся, заключается в том, что щелчок левой кнопкой мыши пользователя из главного меню сохраняется в модуле playGame.py, в результате чего он создает и сохраняет новый круг радиуса 10 и в позиции (0,0). Оба из них являются значениями по умолчанию.

Это происходит только для одного кадра после меню.

Есть ли способ предотвратить это, или это ошибка в моем коде?

Вся помощь очень ценится, как всегда. Если вам нужно больше кода или объяснения этих фрагментов, дайте мне знать.

Если вам нужен полный код, на GitHub . .

.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Вы можете использовать MOUSEBUTTONUP вместо MOUSBUTTONDOWN в меню.

1 голос
/ 21 апреля 2011

Исправляет ли это добавление pygame.event.clear() к вершине Play?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...