🔧 核心初始化 >>>
-
pygame.init():初始化所有pygame模块
-
pygame.quit():退出pygame,释放资源
-
pygame.display.set_mode((width, height)):创建显示窗口
-
pygame.display.set_caption(title):设置窗口标题
🎮 游戏循环 >>>
import pygame
pygame.init()
screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
running = True
dt = 0
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
while running:
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 绘制
screen.fill("purple")
pygame.draw.circle(screen, "red", player_pos, 40)
# 显示更新
pygame.display.flip()
# 帧率控制
dt = clock.tick(60) / 1000
pygame.quit()
基本游戏循环结构,包含事件处理、绘制和帧率控制
🎯 事件处理 >>>
事件类型
pygame.QUIT:窗口关闭
pygame.KEYDOWN:按键按下
pygame.KEYUP:按键释放
pygame.MOUSEBUTTONDOWN:鼠标按下
pygame.MOUSEBUTTONUP:鼠标释放
pygame.MOUSEMOTION:鼠标移动
事件获取
pygame.event.get():获取所有事件
pygame.event.poll():获取单个事件
⌨️ 键盘输入 >>>
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
player_pos.y -= 300 * dt
if keys[pygame.K_s]:
player_pos.y += 300 * dt
if keys[pygame.K_a]:
player_pos.x -= 300 * dt
if keys[pygame.K_d]:
player_pos.x += 300 * dt
鼠标输入
pygame.mouse.get_pos():获取鼠标位置
pygame.mouse.get_pressed():获取鼠标按键状态
pygame.mouse.set_pos(pos):设置鼠标位置
🖌️ 图形绘制 >>>
screen.fill(color):填充背景
pygame.draw.rect(surface, color, rect, width=0):绘制矩形
pygame.draw.circle(surface, color, center, radius, width=0):绘制圆形
pygame.draw.line(surface, color, start_pos, end_pos, width=1):绘制直线
pygame.draw.polygon(surface, color, points, width=0):绘制多边形
pygame.draw.ellipse(surface, color, rect, width=0):绘制椭圆
- RGB元组:
(r, g, b) 范围0-255
- 预定义颜色字符串:
"red", "green", "blue", "purple", "yellow"
pygame.Color 类:提供颜色操作
👾 精灵系统 >>>
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
def update(self):
# 更新逻辑
pass
# 创建精灵组
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
# 游戏循环中
all_sprites.update()
all_sprites.draw(screen)
🖼️ 图像与表面 >>>
pygame.image.load(filename):加载图像
image.convert():转换图像格式,提高性能
image.convert_alpha():转换带透明通道的图像
image.get_rect():获取图像矩形
pygame.transform.scale(image, size):图像缩放
pygame.transform.rotate(image, angle):图像旋转
📝 文本渲染 >>>
# 初始化字体模块
pygame.font.init()
# 创建字体
font = pygame.font.SysFont(None, 36) # 系统字体
# font = pygame.font.Font("custom.ttf", 36) # 自定义字体
# 渲染文本
text = font.render("Hello Pygame", True, (255, 255, 255))
# 绘制文本
screen.blit(text, (x, y))
⏰ 时间与时钟 >>>
pygame.time.Clock():创建时钟对象
clock.tick(FPS):控制帧率,返回帧时间(ms)
clock.get_fps():获取实际帧率
pygame.time.get_ticks():获取自初始化以来的毫秒数
pygame.mixer.init():初始化音频模块
pygame.mixer.music.load(filename):加载音乐
pygame.mixer.music.play(loops=0, start=0.0):播放音乐
pygame.mixer.music.pause():暂停音乐
pygame.mixer.Sound(filename):创建音效对象
sound.play():播放音效
📐 数学向量 >>>
pygame.math.Vector2:2D向量
pygame.math.Vector3:3D向量
- 向量运算:
+, -, *, /
vector.length():向量长度
vector.normalize():归一化
vector.dot(other):点积
pos = pygame.Vector2(100, 200)
vel = pygame.Vector2(5, 5)
# 更新位置
pos += vel
# 计算距离
dist = (pos - target_pos).length()
💥 碰撞检测 >>>
rect.colliderect(other_rect):矩形碰撞
rect.collidepoint(point):点与矩形碰撞
pygame.sprite.spritecollide(sprite, group, dokill):精灵与组碰撞
pygame.sprite.groupcollide(group1, group2, dokill1, dokill2):组与组碰撞
pygame.sprite.spritecollideany(sprite, group):检查是否有碰撞
🖥️ 显示模式 >>>
pygame.FULLSCREEN:全屏模式
pygame.RESIZABLE:可调整大小
pygame.NOFRAME:无边框
pygame.SCALED:自动缩放
# 创建全屏窗口
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
# 创建可调整大小的窗口
screen = pygame.display.set_mode((800, 600), pygame.RESIZABLE)
⚡ 性能优化 >>>
- 使用
convert()/convert_alpha() 转换图像
- 使用精灵组批量绘制
- 避免在循环中加载资源
- 使用
clock.tick() 控制帧率
- 合理使用碰撞检测方法
- 及时释放不再使用的资源