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

#python #pygame #mouseevent #mousewheel #motion-detection

Вопрос:

Я создаю простую гипер-казуальную игру с вертикальным скроллером, используя 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
 

Комментарии:

1. Добавил свой код, пожалуйста, помогите

Ответ №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
 

Комментарии:

1. Спасибо, что ответили на вопрос, сэр, но здесь звук воспроизводится несколько раз в промежутке, и я хочу воспроизводить его только тогда, когда направление меняется. И во-вторых, звук воспроизводится всякий раз, когда я останавливаюсь, двигаясь влево, один раз воспроизводится, если я иду еще левее и меняю направление, он не воспроизводится. То же самое с правой стороной

2. @PrajjwalPathak вы уверены, что реализуете его правильно? Я попробовал это самостоятельно, и это работает, теперь я пытаюсь сделать ответ более ясным, чтобы вы могли найти то, чего не хватает

3. Спасибо, это работало раньше, но у моего звука была небольшая пауза перед звуком, поэтому я подумал, что он работает не так, как предполагалось. Большое спасибо.