这篇博客里涉及pygame中的图片、颜色、常用形状、文字、音效、动画切换、精灵与精灵组以及碰撞检测等简单基础知识,为我写的另一篇博客《python实现飞机大战》提供参考。
https://www.pygame.org/docs/
import pygame,sys
等pygame.init()
方法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)