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

2023年2月26日09:25:57
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()

  • 作者:youaresherlock
  • 原文链接:https://youaresherlock.blog.csdn.net/article/details/79515546
    更新时间:2023年2月26日09:25:57 ,共 4608 字。