Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Алексей Михайлов Знаток (422), на голосовании 2 месяца назад
Не очень шарю в Pygame, делаю по уроку на YT. Произошёл баг при котором звук повторялся несколько раз.
КОД:
 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()
Голосование за лучший ответ
damn Просветленный (47228) 3 месяца назад
Звук mashinka воспроизводится каждый раз, когда ты нажимаешь клавишу, и условие if zvuk <= 1: всегда выполняется, если zvuk не был установлен в значение больше 1. Это приводит к тому, что звук воспроизводится несколько раз, что создаёт эффект "наложения" звуков.
 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()
Алексей МихайловЗнаток (422) 3 месяца назад
Мне нужно чтобы звук был только тогда, когда едет машина
Похожие вопросы