1.Pygame从0实战10(泡泡小游戏添加音效)

这节我们将如何在Pygame游戏中添加音效并且在上节未完成的泡泡游戏中

添加音效 下面是资源链接 点击打开链接 密码:hfjz

播放声音和音效

建议将将.ogg格式作为背景音乐,.wav作为音效

播放背景音乐:
-pygame.mixer.music对象
pygame.mixer.music:
pygame module for controlling streamed audio
music对象的方法:
方法 含义
load() 载入音乐
play() 播放音乐
rewind() 重新播放
stop() 停止播放
pause() 暂停播放
unpause() 恢复播放
fadeout() 淡出
set_volumn() 设置音量
get_volumn() 获取音量
get_busy() 检测音乐流是否正在播放
set_pos() 设置开始播放的位置
get_pos() 获取已经播放的时间
queue() 将音乐文件放入待播放列表中
set_endevent() 在音乐播放完毕时发送事件

get_endevent() 获取音乐播放完毕时发送的事件类型

运行程序,在屏幕上鼠标左键点击发出狗叫声,右键点击发出鸟叫声

空格键控制背景音乐的播放和暂停

# -*- coding: utf-8 -*- # @Author: Clarence # @Date:   2018-03-10 16:09:22 # @Last Modified by:   Clarence # @Last Modified time: 2018-03-10 23:34:24 import pygame import sys from pygame.locals import *  pygame.init() #Initialize the mixer module for Sound loading and playback. #使用之前最好先初始化一下 pygame.mixer.init()  pygame.mixer.music.load("bg_music.ogg") pygame.mixer.music.set_volume(0.2) pygame.mixer.music.play() #开始播放  bird_sound = pygame.mixer.Sound("birdsound.wav") bird_sound.set_volume(0.2) dog_sound = pygame.mixer.Sound("dogbark.wav") dog_sound.set_volume(0.2)   bg_size = width, height = 300, 200 screen = pygame.display.set_mode(bg_size) pygame.display.set_caption("MusicPlayDemo")  #空格表示暂停,再次按空格播放音乐 pause = False  pause_image = pygame.image.load("pause.png").convert_alpha() unpause_image = pygame.image.load("unpause.png").convert_alpha() pause_rect = pause_image.get_rect() #将按钮显示到屏幕的正中央 pause_rect.left, pause_rect.top = (width - pause_rect.width) // 2,\ (height - pause_rect.height) // 2  clock = pygame.time.Clock()  while True: 	for event in pygame.event.get(): 		if event.type == QUIT: 			sys.exit()  		if event.type == MOUSEBUTTONDOWN: 			if event.button == 1: 				#鼠标按左键播放狗叫声 				dog_sound.play() 			if event.button == 3: 				#鼠标按右键播放鸟叫声 				bird_sound.play()  		if event.type == KEYDOWN: 			#按下空格键 控制背景音乐的暂停和播放 			if event.key == K_SPACE: 				pause = not pause   	screen.fill((255, 255, 255))  	if pause: 		screen.blit(pause_image, pause_rect) 		pygame.mixer.music.pause() 	else: 		screen.blit(unpause_image, pause_rect) 		pygame.mixer.music.unpause()  	pygame.display.flip()  	clock.tick(30)

Pygame从0实战10(泡泡小游戏添加音效)

下面是加入背景音乐的泡泡游戏代码

import  pygame import sys from pygame.locals import * from random import *  class Ball(pygame.sprite.Sprite): 	def __init__(self, image, position, speed, bg_size): 		# Call the parent class (Sprite) constructor 		pygame.sprite.Sprite.__init__(self)  		self.image = pygame.image.load(image).convert_alpha() 		self.rect = self.image.get_rect() 		#小球的位置 		self.rect.left, self.rect.top = position 		self.speed = speed 		self.width, self.height = bg_size[0], bg_size[1] 		#self.width = self.width / 2  	''' 	Pygame.Rect.move(): 		moves the rectangle  		move(x, y) -> Rect 		Returns a new rectangle that is moved by the given offset. The 		x and y arguments can be any integer value, positive or  		negative. 		可以在Rect对象的move方法中添加可正可负的两元素 		如果要实现小球的移动,则要在类中添加一个move()方法,并且在绘图的时候调用小球 		对象的move()方法 	''' 	def move(self): 		self.rect = self.rect.move(self.speed)  		#类似实现贪吃蛇穿入墙壁从对面墙壁出来(左右方向) 		if self.rect.right < 0: 			self.rect.left = self.width 		elif self.rect.left > self.width: 			self.rect.right = 0  		#(上下方向) 从下往上 和 从上往下 		elif self.rect.bottom < 0: 			self.rect.top = self.height 		elif self.rect.top > self.height: 			self.rect.bottom = 0   def main(): 	pygame.init()  	ball_image = "gray_ball.png" 	bg_image = "background.png"  	running = True  	# 添加模型的背景音乐 	pygame.mixer.music.load("bg_music.ogg") 	pygame.mixer.music.play()  	# 添加音效 	loser_sound = pygame.mixer.Sound("loser.wav") 	laugh_sound = pygame.mixer.Sound("laugh.wav") 	winner_sound = pygame.mixer.Sound("winner.wav") 	hole_sound = pygame.mixer.Sound("hole.wav")  	# 音乐播放完时游戏结束,将GAMEOVER事件加入到事件队列中去 	# USEREVENT为用户自定义的事件 	# 如果想定义第二个事件可以是GAMEOVERTWO = USEREVENT + 1 	GAMEOVER = USEREVENT 	#背景音乐结束后发生GAMEOVER事件消息 	pygame.mixer.music.set_endevent(GAMEOVER)  	# 根据背景图片指定游戏界面尺寸 	bg_size = width, height = 1024, 681 	screen = pygame.display.set_mode(bg_size) 	pygame.display.set_caption("Play the Ball")  	#.png格式可以加入apha通道 	background = pygame.image.load(bg_image).convert_alpha()  	#用来存放小球对象的列表 	balls = [] 	group = pygame.sprite.Group()  	for i in range(5): 		#球的尺寸是100*100 随机产生小球的位置 		position = randint(0, width-100), randint(0, height-100) 		#两个元素的一个列表,表示x轴和y轴方向的速度 		speed = [randint(-10, 10), randint(-10, 10)] 		#实例化小球对象 分别传入Surface对象 位置二元组 速度两元素列表 		ball = Ball(ball_image, position, speed, bg_size) 		#碰撞检测之后不从组里面删除 		while pygame.sprite.spritecollide(ball, group, False, pygame.sprite.collide_circle): 			ball.rect.left, ball.rect.top = randint(0, width - 100),\ 			randint(0, height - 100)  		balls.append(ball) #将小球加入到小球列表中 		group.add(ball)  	# CLock()对象用来设置小球的帧率 	clock = pygame.time.Clock()  	while  running: 		for event in pygame.event.get(): 			if event.type == QUIT: 				sys.exit()  			elif event.type == GAMEOVER: 				loser_sound.play() 				pygame.time.delay(2000) 				laugh_sound.play() 				running = False #结束循环  		screen.blit(background, (0, 0))  		for each in balls: 			each.move() 			screen.blit(each.image, each.rect)   		for each in group: 			group.remove(each)  			if pygame.sprite.spritecollide(each, group, False, pygame.sprite.collide_circle): 				each.speed[0] = -each.speed[0] 				each.speed[1] = -each.speed[1]  			group.add(each)  		pygame.display.flip() #将显示缓冲区中的数据刷入显示器中 		clock.tick(30)   if __name__ == "__main__": 	main()