Обнаружение мыши Pygame замедляет мою программу - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу создать пазл с картинками, использующий вводы мышью для перемещения частей, я написал этот модуль для получения вводов мышью, но когда он используется, он позволяет мне только закрыть окно pygame с диспетчером задач.

Это также, по-видимому, заставляет программу зависать до тех пор, пока одно из условий не будет выполнено.

Должен ли я полностью переписать этот модуль или я просто допустил ошибку?

Спасибо за вашу помощь.

import Data

import pygame
pygame.init()



def MD():

    event = pygame.event.wait()


    det_gen_pos = None #determen general position # return index 0
    det_gen_mov = None #determen general movement # return index 1

    det_L_D = False #determen left press # return index 2
    det_L_U = False #determen left release # return index 3

    det_M_D = False #determen right press # return index 4
    det_M_U = False #determen right release # return index 5

    det_R_D = False #determem wheel press # return index  6
    det_R_U = False #determen wheel release # return index 7

    # 0 turning forward # 1 turning backwards # 2 stop turning forward # 3 stop turning backwards
    det_W_T = None #determens 4 different states of the wheel # return index 8


    if event.type == pygame.MOUSEMOTION:
        det_gen_pos = event.pos
        det_gen_mov = event.rel

    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            det_L_D = True
        if event.button == 2:
            det_M_D = True
        if event.button == 3:
            det_R_D = True
        if event.button == 4:
            det_W_T = 0
        if event.button == 5:
            det_R_D = 2

        det_gen_pos = event.pos

    if event.type == pygame.MOUSEBUTTONUP:
        if event.button == 1:
            det_L_U = True
        if event.button == 2:
            det_M_U = True
        if event.button == 3:
            det_R_U = True
        if event.button == 4:
            det_W_T = 1
        if event.button == 5:
            det_R_D = 3

        det_gen_pos = event.pos


    Data.LastMotion.append((det_gen_pos, det_gen_mov, det_L_D, det_L_U, det_M_D, det_M_U, det_R_D, det_R_U ,det_W_T))
    if len(Data.LastMotion) == Data.MotionCount:
        Data.LastMotion.pop(0)

    return Data.LastMotion[len(Data.LastMotion) - 1]

1 Ответ

0 голосов
/ 03 апреля 2020

Я считаю, что проблема с pygame.event.wait(). Это приведет к тому, что программа ожидает события, прежде чем продолжить, таким образом «замораживая» программу во время ожидания.

вместо этого можно попробовать использовать этот метод проверки:

for event in pygame.event.get():
    # Check for left click
    if event.type == pygame.MOUSEBUTTONDOWN: # or any other event types
        # some action
...