pygame游戏开发参考指南

这篇博客里涉及pygame中的图片、颜色、常用形状、文字、音效、动画切换、精灵与精灵组以及碰撞检测等简单基础知识,为我写的另一篇博客《python游戏开发基于pygame实现飞机大战》提供参考。

帮助文档

https://www.pygame.org/docs/

Pygame如何使用

  1. 引入相关的包:import pygame,sys
  2. pygame进行初始化,调用pygame.init()方法
  3. 得到屏幕对象Surface
  4. 事件的监听(游戏主循环):处理游戏事件,更新游戏状态,重新绘制在屏幕上

游戏中的图片

1.图片的加载

# 使用绝对路径
bg = pygame.image.load('./bg.png')

2.在频幕上绘制

screen.blit(bg,bg.get_rect)

3.像素上的坐标
左上角为坐标原点,从左往右为x轴,从上往下为y轴线

游戏中的颜色

1.使用RGB表示
取值范围0~255

2.RGBA表示透明色
A(alpha):0~255

游戏中的常用形状

1.画线

# 画一条红色的,从坐标(11,11)到坐标(22,22)宽度为3像素的线段
pygame.draw.line(screen,red,(11,11),(22,22),3)

2.画矩形

# 画从坐标(10,20)宽度为100,高度为200,边框为3像素的矩形
pygame.draw.rect(screen,red,(10,20,100,200),3)

3.画圆

# 画圆心坐标为(100,100)半径为100,边框为3像素的圆形
pygame.draw.circle(screen,red,(100,100),100,3)

游戏中的文字

1.加载字体

# 加载系统提供的字体,文字大小,加粗,斜体
font = pygame.font.SysFont('华文行楷',32,True,True)

# 还有一种加载字体的方式,考虑到不同计算机字体不同名,可以把字体ttf文件放进项目中进行调用
font = pygame.font.Font('./文件名称',32) # 这里使用绝对路径

2.加载完字体之后,需要得到Surface对象

# 渲染的文字,颜色,背景色
text = font.render('需要渲染的文字',True,RED,GREEN)

3.在屏幕上进行绘制

# 绘制文字,文字初始值
screen.blit(text,text.get_rect())

游戏中的音效

1.加载背景音乐

# 通过load()方法加载背景音乐文件路径
pygame.mixer.music.load('./music.mp3')

2.音量大小设置

# 范围0~1,值越小,音量越小
pygame.mixer.music.set_volume(0.5)

3.循环播放背景音乐

# play()方法指定-1实现无限循环播放
pygame.mixer.music.play(-1)

游戏当中动画切换

1.帧速率
用FPS或者帧/秒来进行控制
2.通过pygame.time.Clock()中的tick(num)进行控制帧速率
3.用算法来进行图片切换

# 用counter进行计数
counter = 0
# counter += 1
# 如果可以被5整除,绘制一张图片,不能的时候绘制另一张图片来实现来回切换产生动画效果
if counter % 5 == 0:
	screen.blit(image,(20,20))
else:
	screen.blit(image2,(20,20))

精灵和精灵组

1.精灵
精灵可以认为是一张张小图片,它可以是在屏幕上移动的图形对象,并且可以与其它图形对象进行交互。比如在屏幕上画的矩形,圆形,进行封装让他可以与其他图形进行交互。精灵图像可以是pygame使用函数绘制的图像,也可以是图片文件。

2.精灵组
精灵组用于管理组内精灵的绘制和更新,是一个容器。

碰撞检测

1.两个精灵之间的矩形检测

# collide_rect()函数实现检测两个精灵是否有重叠
pygame.sprite.collide_rect(sprite_1,sprite_2)
# collide_rect_ratio()链式调用 第一个()加了比率,更加精确,指定碰撞的区域
pygame.sprite.collide_rect_ratio(0.5)(sprite_1,sprite_2)

2.两个精灵之间的圆形检测

pygame.sprite.collide_circle(sprite_1,sprite_2)

3.两个精灵之间的像素遮罩检测

# 精灵不规则时
pygame.sprite.collide_mask(sprite_1,sprite_2)

4.精灵与精灵组之间的碰撞

# 精灵撞到精灵组内的任意一个都算碰撞
pygame.sprite.spritecollideany(sprite,sprite_group,bool)
发布了20 篇原创文章 · 获赞 18 · 访问量 8343

猜你喜欢

转载自blog.csdn.net/wankcn/article/details/103691918