Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Баг со звуком Pygame

Не очень шарю в Pygame, делаю по уроку на YT. Произошёл баг при котором звук повторялся несколько раз.
КОД:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
 import pygame 
import random 
 
pygame.init() 
 
screen = pygame.display.set_mode((1000,1000)) 
pygame.display.set_caption("The Shiter Drive 1.0.1") 
icon = pygame.image.load("images/icon.png") 
pygame.display.set_icon(icon) 
 
car_x = 400 
car_y = 750 
car_speed = 10 
c2_speed = 2.5 
zvuk = 0 
 
fon = pygame.image.load("images/fonofon.png") 
car = pygame.image.load("images/car-up.png") 
zastavochka = pygame.image.load("images/no.png") 
 
pustinya = pygame.mixer.Sound("sounds/pustinya.mp3") 
pustinya.play(-1) 
mashinka = pygame.mixer.Sound("sounds/mashinka.mp3") 
 
quiter = True 
 
while quiter: 
 
    screen.blit(fon, (0,0)) 
    screen.blit(car, (car_x, car_y)) 
    screen.blit(zastavochka, (0,0)) 
 
    keys = pygame.key.get_pressed() 
 
    if keys[pygame.K_LEFT] and car_x >= 0: 
        car = pygame.image.load("images/car-left.png") 
        car_x -= car_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_RIGHT] and car_x <= 800: 
        car = pygame.image.load("images/car-right.png") 
        car_x += car_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_UP]: 
        car = pygame.image.load("images/car-up.png") 
        car_y -= car_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_DOWN] and car_y <= 800: 
        car = pygame.image.load("images/car-down.png") 
        car_y += car_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_LEFT] and keys[pygame.K_UP] and car_x >= 0: 
        car = pygame.image.load("images/car-left-up.png") 
        car_x -= c2_speed 
        car_y -= c2_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_RIGHT] and keys[pygame.K_UP] and car_x <= 800: 
        car = pygame.image.load("images/car-right-up.png") 
        car_x += c2_speed 
        car_y -= c2_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_LEFT] and keys[pygame.K_DOWN] and car_x >= 0 and car_y <= 800: 
        car = pygame.image.load("images/car-left-down.png") 
        car_x -= c2_speed 
        car_y += c2_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
    if keys[pygame.K_RIGHT] and keys[pygame.K_DOWN] and car_x <= 800 and car_y <= 800: 
        car = pygame.image.load("images/car-right-down.png") 
        car_x += c2_speed 
        car_y += c2_speed 
        if zvuk <= 1: 
            mashinka.play(-1) 
            zvuk = 1 
 
    pygame.display.update() 
     
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            quiter = False 
            pygame.quit() 
 
По дате
По рейтингу
Аватар пользователя
Просветленный

Звук mashinka воспроизводится каждый раз, когда ты нажимаешь клавишу, и условие if zvuk <= 1: всегда выполняется, если zvuk не был установлен в значение больше 1. Это приводит к тому, что звук воспроизводится несколько раз, что создаёт эффект "наложения" звуков.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
 import pygame  
import random  
 
pygame.init()  
 
screen = pygame.display.set_mode((1000,1000))  
pygame.display.set_caption("The Shiter Drive 1.0.1")  
icon = pygame.image.load("images/icon.png")  
pygame.display.set_icon(icon)  
 
car_x = 400  
car_y = 750  
car_speed = 10  
c2_speed = 2.5  
zvuk = 0  
 
fon = pygame.image.load("images/fonofon.png")  
car = pygame.image.load("images/car-up.png")  
zastavochka = pygame.image.load("images/no.png")  
 
pustinya = pygame.mixer.Sound("sounds/pustinya.mp3")  
pustinya.play(-1)  
mashinka = pygame.mixer.Sound("sounds/mashinka.mp3")  
 
quiter = True  
 
while quiter:  
 
    screen.blit(fon, (0,0))  
    screen.blit(car, (car_x, car_y))  
    screen.blit(zastavochka, (0,0))  
 
    keys = pygame.key.get_pressed()  
 
    if keys[pygame.K_LEFT] and car_x >= 0:  
        car = pygame.image.load("images/car-left.png")  
        car_x -= car_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_RIGHT] and car_x <= 800:  
        car = pygame.image.load("images/car-right.png")  
        car_x += car_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_UP]:  
        car = pygame.image.load("images/car-up.png")  
        car_y -= car_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_DOWN] and car_y <= 800:  
        car = pygame.image.load("images/car-down.png")  
        car_y += car_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_LEFT] and keys[pygame.K_UP] and car_x >= 0:  
        car = pygame.image.load("images/car-left-up.png")  
        car_x -= c2_speed  
        car_y -= c2_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_RIGHT] and keys[pygame.K_UP] and car_x <= 800:  
        car = pygame.image.load("images/car-right-up.png")  
        car_x += c2_speed  
        car_y -= c2_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_LEFT] and keys[pygame.K_DOWN] and car_x >= 0 and car_y <= 800:  
        car = pygame.image.load("images/car-left-down.png")  
        car_x -= c2_speed  
        car_y += c2_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
    if keys[pygame.K_RIGHT] and keys[pygame.K_DOWN] and car_x <= 800 and car_y <= 800:  
        car = pygame.image.load("images/car-right-down.png")  
        car_x += c2_speed  
        car_y += c2_speed  
        if zvuk == 0:  
            mashinka.play(-1)  
            zvuk = 1  
 
    # Проверка, если ни одна из клавиш не нажата, то остановить звук 
    if not any(keys): 
        if zvuk == 1: 
            mashinka.stop() 
            zvuk = 0 
 
    pygame.display.update()  
 
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            quiter = False  
            pygame.quit()