#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. Спасибо, это работало раньше, но у моего звука была небольшая пауза перед звуком, поэтому я подумал, что он работает не так, как предполагалось. Большое спасибо.