千字赘述,万字总结,就为博客点一赞吧!
1.安装pygame
pip install pygame
安装完成后在python中输入检验有没有问题,回车键应该不会报错。
>>>import pygame
>>>
2.pygame模块预览
3.项目实战
3.1.0 hello world
3.1 初始化Pygame
初始化是使用Pygame库的第一步。在编写任何Pygame程序之前,必须首先初始化Pygame模块。这可以通过调用pygame.init()函数来实现。初始化过程会准备Pygame所需的所有子系统,如显示、事件和音频。
import pygame
pygame.init()
初始化后,可以创建游戏窗口并开始使用Pygame的各种功能。初始化Pygame是一个简单的过程,但它是创建任何Pygame应用程序的基础。
3.2 事件处理
事件处理是Pygame中的核心概念之一。Pygame通过事件队列管理用户的输入,如键盘按键、鼠标点击等。事件是一个包含有关用户操作信息的对象,可以通过pygame.event.get()函数获取。
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
在上面的代码示例中,我们检查事件队列中的每个事件。如果事件类型是QUIT,这意味着用户想要关闭窗口,我们调用pygame.quit()来退出Pygame并调用sys.exit()来结束程序。
事件处理是响应用户输入的关键,它允许游戏根据玩家的操作做出反应。通过事件处理,开发者可以控制游戏流程,实现各种交互功能。
3.3 创建窗口
在Pygame中,创建窗口是开始游戏开发的基本步骤之一。使用pygame.display.set_mode()函数可以创建一个窗口,该函数接受一个元组作为参数,指定窗口的宽度和高度。
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
创建窗口后,可以使用pygame.display.set_caption()函数为窗口设置标题。
pygame.display.set_caption('My Pygame Game')
窗口是游戏的画布,所有的图形绘制和显示都将在这个窗口中进行。
3.4 图形绘制
Pygame提供了丰富的图形绘制功能,允许开发者在窗口中绘制各种形状和图像。基本的绘图函数包括pygame.draw.line()、pygame.draw.circle()、pygame.draw.rect()等。
# 绘制一个红色矩形
color = (255, 0, 0)
rect = (50, 50, 100, 100)
pygame.draw.rect(screen, color, rect)
在绘制图形时,可以选择颜色和形状,以及它们的尺寸和位置。绘制的图形将显示在游戏窗口中,为游戏添加视觉效果。
3.5 动画和帧率控制
在游戏开发中,动画是创建动态效果的关键。Pygame通过控制帧率来实现动画效果。帧率是指每秒钟刷新屏幕的次数,通过pygame.time.Clock()可以创建一个时钟对象来控制帧率。
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill((0, 0, 0)) # 清屏
# 绘制动画
# ...
pygame.display.flip() # 更新屏幕显示
clock.tick(60) # 设置帧率为60
在上面的代码中,clock.tick(60)确保游戏以每秒60帧的速度运行,这为动画提供了平滑的效果。
3.6 音频处理
Pygame还支持音频处理,可以在游戏中添加背景音乐和音效。使用pygame.mixer.init()初始化音频模块,然后加载音频文件并播放。
pygame.mixer.init()
sound = pygame.mixer.Sound('explosion.wav')
sound.play()
音频处理为游戏增加了听觉效果,提高了游戏的沉浸感。
3.7 游戏循环
游戏循环是游戏程序的核心,它控制着游戏的流程。游戏循环通常包括事件处理、游戏状态更新、图形绘制和屏幕刷新。
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 更新游戏状态
# ...
# 清屏
screen.fill((0, 0, 0))
# 绘制图形
# ...
# 更新屏幕显示
pygame.display.flip()
clock.tick(60)
游戏循环确保游戏持续运行,直到用户选择退出。
3.8 资源管理
在游戏开发中,管理游戏资源如图像、音频和字体是必要的。Pygame提供了加载和使用这些资源的功能。
image = pygame.image.load('background.png')
font = pygame.font.Font(None, 36)
text = font.render('Hello Pygame', True, (255, 255, 255))
资源管理确保游戏能够有效地使用内存和存储,提高游戏的性能。
通过上述概念的介绍,新手可以对Pygame有一个基本的了解,并开始尝试开发自己的游戏。在实际开发中,还可以探索更多高级功能,如碰撞检测、物理引擎集成等,以丰富游戏的玩法和体验。
4. 创建游戏窗口
创建游戏窗口是使用 Pygame 进行游戏开发的基础步骤。在这个环节,你将学习如何初始化 Pygame 库,并创建一个具有指定大小和标题的游戏窗口。
4.1 设置窗口大小和标题
在 Pygame 中,设置窗口大小和标题是一个简单的过程。首先,你需要导入 Pygame 模块,并初始化它。之后,使用 pygame.display.set_mode() 函数来设置窗口的宽度和高度,使用 pygame.display.set_caption() 函数来设置窗口的标题。
以下是创建游戏窗口的基本代码示例:
import pygame
# 初始化 Pygame
pygame.init()
# 设置窗口的宽度和高度
width, height = 800, 600
# 创建窗口对象
window = pygame.display.set_mode((width, height))
# 设置窗口标题
pygame.display.set_caption('我的 Pygame 游戏')
# 游戏主循环
running = True
while running:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 退出 Pygame
pygame.quit()
5.1 绘制基本图形
在Pygame中,绘制基本图形是游戏开发的基础。通过这些图形,开发者可以构建游戏的视觉元素,如角色、障碍物和背景等。以下是一些基本图形的绘制方法:
线条:使用pygame.draw.line(screen, color, start_pos, end_pos, width)来绘制线条,其中screen是窗口的Surface对象,color是颜色,start_pos和end_pos是线的起点和终点坐标,width是线宽。
矩形:使用pygame.draw.rect(screen, color, rect, width)来绘制矩形,其中rect是一个矩形区域的坐标,可以是(left, top, width, height)或Rect对象,width是边框宽度,如果为0则填充整个矩形。
圆形:使用pygame.draw.circle(screen, color, center, radius, width)来绘制圆形,其中center是圆心坐标,radius是半径,width是圆边宽度。
多边形:使用pygame.draw.polygon(screen, color, points, width)来绘制多边形,其中points是一个点的列表,每个点是一个坐标元组,width是多边形边的宽度。
弧形:使用pygame.draw.arc(screen, color, rect, start_angle, stop_angle, width)来绘制弧形,其中rect是弧形所在矩形的坐标,start_angle和stop_angle是弧形的起始和结束角度,以弧度为单位。
示例代码:
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Animation Example')
# 定义颜色
WHITE = (255, 255, 255)
# 初始化时钟
clock = pygame.time.Clock()
# 初始化球的位置和速度
ball_pos = [350, 300]
ball_speed = [2, 2]
# 游戏主循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 更新球的位置
ball_pos[0] += ball_speed[0]
ball_pos[1] += ball_speed[1]
# 检查球是否撞到边界
if ball_pos[0] <= 0 or ball_pos[0] >= 800:
ball_speed[0] = -ball_speed[0]
if ball_pos[1] <= 0 or ball_pos[1] >= 600:
ball_speed[1] = -ball_speed[1]
# 清除屏幕
screen.fill((0, 0, 0))
# 绘制球
pygame.draw.circle(screen, WHITE, ball_pos, 50)
# 更新屏幕显示
pygame.display.flip()
# 控制帧率
clock.tick(60)
pygame.quit()
sys.exit()
效果
4.项目实战
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pygame
from pygame.locals import *
from sys import exit
background_image = 'image/sushiplate.jpg'
mouse_image = 'image/fugu.png'
# 初始化pygame,为使用硬件做准备
pygame.init()
# 创建了一个窗口
screen = pygame.display.set_mode((640, 480), 0, 32)
# 设置窗口标题
pygame.display.set_caption("hello world")
# 加载并转换图像
background = pygame.image.load(background_image).convert()
mouse_cursor = pygame.image.load(mouse_image).convert_alpha()
while True:
for event in pygame.event.get():
if event.type == QUIT: # 接收到退出事件后退出程序
exit()
screen.blit(background, (0, 0)) # 画上背景图
x, y = pygame.mouse.get_pos() # 获得鼠标位置
# 计算光标左上角位置
x -= mouse_cursor.get_width()/2
y -= mouse_cursor.get_height()/2
# 画上光标
screen.blit(mouse_cursor, (x, y))
# 刷新画面
pygame.display.update()
pygame.mouse的函数:
-
pygame.mouse.get_pressed —— 返回按键按下情况,返回的是一元组,分别为(左键, 中键, 右键),如按下则为True
-
pygame.mouse.get_rel —— 返回相对偏移量,(x方向, y方向)的一元组
-
pygame.mouse.get_pos —— 返回当前鼠标位置(x, y)
-
pygame.mouse.set_pos —— 设置鼠标位置
-
pygame.mouse.set_visible —— 设置鼠标光标是否可见
-
pygame.mouse.get_focused —— 检查窗口是否接受鼠标事件,即鼠标是否focus到窗口
-
pygame.mouse.set_cursor —— 设置鼠标光标式样
-
pyGame.mouse.get_cursor ——得到鼠标图片