您的位置:首页 > 其它

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

2018-03-11 13:35 197 查看
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)


下面是加入背景音乐的泡泡游戏代码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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Pygame 游戏开发