首页 > 解决方案 > Pygame,我想让它播放声音

问题描述

如何使这项工作。一旦矩形穿过屏幕中心,我希望它播放音频。

import pygame
from pygame import*

pygame.init()
mixer.init()

win=pygame.display.set_mode((600,00))
pygame.display.set_caption("bla")

x=20
y=20

width=10
height=10

run=True
while run:
    pygame.time.delay(10)

    for event in pygame.event.get():
        if event == pygame.QUIT:
            run= False


    keys = pygame.key.get_pressed()

    if keys [pygame.K_LEFT] :
        x-=4
    if keys [pygame.K_RIGHT]:
        x+=4
    if keys [pygame.K_UP]:
        y-=4
    if keys [pygame.K_DOWN]:
        y+=4

    if 350 < x < 450 and 350 < y < 450:
        mixer.music.load('music.wav')
        mixer.music.play(0)




    win.fill((0,0,0))
    pygame.draw.circle(win,(255,0,0),(300,300),(10))
    pygame.draw.rect(win,(255,0,0),(x,y,width,height))
    pygame.display.update()

我希望当矩形穿过窗口中心时会播放声音。但是什么都没有发生

标签: pythonpygame

解决方案


首先,你有一个错字:

win=pygame.display.set_mode((600,00))
#                                ^^^^

我想应该是:

win=pygame.display.set_mode((600,600))

为了测试您的代码,您可以添加一个灰色矩形区域来显示光标应该进入的位置以开始播放音乐,这样您就可以确定必须将光标放在哪里。

win.fill((0,0,0))
pygame.draw.rect(win, (100, 100, 100), (350, 350, 100, 100)) #this is the rectagle where the music starts
pygame.draw.circle(win,(255,0,0),(300,300),(10))
pygame.draw.rect(win,(255,0,0),(x,y,width,height))
pygame.display.update()

实际上并不是真正在屏幕的中心,所以也许你需要调整坐标。将 x 和 y 减少 100 以使其在 600x600 屏幕中居中。

另请注意,在光标停留在该区域之前,您将听不到任何声音,因为实际上您每次迭代都开始播放音乐。每次迭代都会倒带音乐。
但是,当您退出该区域时,它将开始。要让它在您进入广场时启动,请检查音乐是否已经在播放,并且只有在没有播放任何内容时才启动它:

if 350 < x < 450 and 350 < y < 450:
    if not mixer.music.get_busy():
        mixer.music.load('music.wav')
        mixer.music.play(0)

pygame.mixer.music.get_busy()检查音乐是否正在播放。


推荐阅读