有了前面兩章的學習,相信大家對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格式的音頻檔案;
同樣的,我們先來分析一下播放音樂的過程:
-
首先我們要使用pygame.mixer子產品,需要先初始化哈
pygame.mixer.init()
-
需要播放,我們肯定需要将音樂檔案加載到項目裡面來,第二部就是加載:
第一種加載音樂的方式,這種方式一般是用來加載一些比較短的聲音,比如一些音效
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)
這裡有兩個參數需要注意一下:
- pygame.mixer.music.set_volume(0.5) 這裡設定音量的0.5,就是百分之五十的意思,就是目前系統音量的百分之五十
- pygame.mixer.music.play(-1) 這裡的-1代表播放的次數,-1就是無限循環下去,反之,如果想要播放一遍就停止,那麼隻需要将-1改為1就好了