Как проверить, изменилось ли направление игрока в направлении x при следовании за движением мыши в pygame

Я создаю простую гиперказуальную игру с вертикальной прокруткой, используя pygame. Здесь мой игрок следует за движением мыши и меняет свое местоположение в зависимости от положения мыши. Теперь я хочу воспроизводить звуковой сигнал всякий раз, когда игрок меняет направление с левого конца на правый или наоборот. Я пытался использовать два логических значения и проверять относительное движение, но это не работает. Как мне это сделать ?

введите здесь описание изображения

Вот мой код для проверки смены направления

if event.type == pygame.MOUSEBUTTONDOWN and not home_page:
    if p.rect.collidepoint(event.pos):
        touched = True
        x, y = event.pos
        offset_x = p.rect.x - x

if event.type == pygame.MOUSEBUTTONUP and not home_page:
    touched = False

if event.type == pygame.MOUSEMOTION and not home_page:
    if touched:
        x, y = event.pos
        rel = event.rel[0]
        if move_right and rel < -3:
            move_right = False
            move_left = True
            move_fx.play()
        if move_left and rel > 3:
            move_right = True
            move_left = False
            move_fx.play()

        p.rect.x =  x + offset_x

person Prajjwal Pathak    schedule 29.05.2021    source источник
comment
Добавил свой код, помогите   -  person Prajjwal Pathak    schedule 29.05.2021


Ответы (1)


Создайте переменную вне игрового цикла, где вы сохраняете текущую позицию x, чтобы в следующем цикле вы могли видеть, является ли новая позиция x выше (справа) или ниже (слева), чем предыдущая, например:

prevx = 0
right = True
left = False
while True:

...

if event.type == pygame.MOUSEMOTION and not home_page:
    if touched:
        x, y = event.pos
        if right and prevx > x: #changed direction to left
            right = False
            left = True
            move_fx.play()
        if left and prevx < x: #changed direction to right
            right = True
            left = False
            move_fx.play()

        prevx = x
        p.rect.x =  x + offset_x
person Matteo    schedule 29.05.2021
comment
Спасибо за ответ на вопрос, сэр, но здесь звук воспроизводится несколько раз между ними, и я хочу воспроизводить его только при изменении направления. А во-вторых, звук воспроизводится всякий раз, когда я останавливаюсь, когда иду налево, когда-то играл, если я иду левее и меняю направление, он не воспроизводится. То же с правой стороны - person Prajjwal Pathak; 30.05.2021
comment
@PrajjwalPathak, вы уверены, что правильно его реализуете? Я попробовал это сам, и это работает, теперь я пытаюсь сделать ответ более ясным, чтобы вы могли найти, чего не хватает - person Matteo; 30.05.2021
comment
Спасибо, это работало раньше, но у моего звука была небольшая пауза перед звуком, поэтому я подумал, что это не работает должным образом. Большое спасибо. - person Prajjwal Pathak; 31.05.2021