有了前面两章的学习,相信大家对pygame已经有了一个初步的了解,接下来我们就要开始一步一步完善我们的游戏了;
添加背景图片应该没有什么难度,只需要将图片加载进来,然后再飞机绘制之前将背景图片绘制好就行了,这里不要问为什么要先绘制背景图片,这就好比写错字了,需要用修正液修改,肯定是先涂修正液在重新写吧:
import pygame
import sys
from pygame.locals import *
pygame.init()
screen_size = width,height = 480,700
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('飞机大战')
background = pygame.image.load('./images/background.png').convert()
# 惊喜的发现,这里图片加载之后有一个convert()方法,这个方法是用来做什么的呢?
# 这个是用来将图片转换为像素格式,这样在进行图片刷新的时候,程序的效率会更高
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.blit(background,(0,0))
pygame.display.flip()
pygame中的pygame.mixer就是专门处理声音的模块,可以处理wav、mp3、wma和ogg格式的音频文件;
同样的,我们先来分析一下播放音乐的过程:
第一种加载音乐的方式,这种方式一般是用来加载一些比较短的声音,比如一些音效
voice = pygame.mixer.Sound('./sound/get_bomb.wav')
第二种加载的就是像音乐这样,文件比较大,时长比较长的音乐,比如背景音乐
pygame.mixer.music.load('./sound/game_music.ogg')
# Sound对象我们用play()方法播放
voice.play()
# 用music模块加载进来的音乐,我们用music.play()方法播放音乐
pygame.mixer.music.play()
接下来,我们来试下怎么加载背景音乐并播放吧:
import pygame
import sys
from random import *
from pygame.locals import *
class PlaneClass(pygame.sprite.Sprite):
def __init__(self, img, position, speed):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(img)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = position
self.speed = speed
def move(self):
self.rect = self.rect.move(self.speed)
if self.rect.left < 0 or self.rect.right > width:
self.speed[0] = -self.speed[0]
if self.rect.top < 0 or self.rect.bottom > height:
self.speed[1] = -self.speed[1]
def collide_check(group):
for plane in group:
plane.move()
for plane in group:
group.remove(plane)
if pygame.sprite.spritecollide(plane, group, False, pygame.sprite.collide_mask):
plane.speed[0] = -plane.speed[0]
plane.speed[1] = -plane.speed[1]
collide_voice = pygame.mixer.Sound('./sound/get_bomb.wav') # 添加飞机碰撞之后产生的音效
collide_voice.play()
group.add(plane)
screen.blit(plane.image, plane.rect)
pygame.init()
screen_size = width, height = 480, 700
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('飞机大战')
bg = pygame.image.load('./images/background.png').convert() # 加载背景图片
pygame.mixer.music.load('./sound/game_music.ogg') # 加载背景音乐
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 播放背景音乐
imgs = ['./images/me1.png', './images/enemy1.png', './images/enemy2.png']
group = pygame.sprite.Group()
for i in range(3):
img_position = [i * 200, 10]
speed = [choice([-2, 2]), choice([-2, 2])]
airplane = PlaneClass(imgs[i], img_position, speed)
group.add(airplane)
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.blit(bg,(0,0)) # 绘制背景图片
collide_check(group)
pygame.display.flip()
clock.tick(60)
这里有两个参数需要注意一下: