介绍
安装
**游戏的初始化与退出
**
方法 | 说明 |
---|---|
pygame.init() | 导入并初始化所有pygame模块,使用其它模块之前,必须先调用 init 方法 |
pygame.quit() | 卸载所有pygame模块,在游戏结束前调用 |
游戏中的坐标系
示例
import pygame
# 定义一个英雄的矩形,参数:x轴,y轴,宽,高
hero_rect=pygame.Rect(100,300,120,50)
print("英雄的原点是:%d,%d"%(hero_rect.x,hero_rect.y))
print("英雄的宽高是:%d,%d"%(hero_rect.width,hero_rect.height))
创建游戏主窗口
方法 | 说明 |
---|---|
pygame.display.set_mode(resolution=(0,0),flags=0,depth=0) | 初始化游戏显示窗口参数:resolution: 指定屏幕的宽和高,默认创建的窗口大小和屏幕大小一致flags:指定屏幕的附加选项,例如是否全屏等,默认不需要传递depth:表示颜色的位数,默认自动匹配 |
pygame.display.update() | 刷新屏幕内容显示 |
示例
pygame.init()
# 创建游戏的主窗口,只指定宽和高
screen=pygame.display.set_mode((512,768))
# 加载图像
bg=pygame.image.load("./img/bg1.jpg")
# 在屏幕上绘制图像
screen.blit(bg,(0,0))
# 更新屏幕显示
pygame.display.update()
**游戏中的动画原理
**
示例
# 创建游戏时钟
clock=pygame.time.Clock()
while True:
# 设置每秒刷新60次
clock.tick(60)
游戏的事件与监听(event)
示例
while True:
# 设置每秒刷新60次
clock.tick(60)
# 监听用户点击关闭按钮
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
# 退出系统
exit()
示例
plane_sprites.py 模块(定义派生精灵子类)
import pygame
# 自定义派生精灵子类,继承pygame.sprite.Sprite
class GameSprites(pygame.sprite.Sprite):
"""游戏精灵基类"""
def __init__(self,img_name,speed=1):
# 调用父类的初始化方法
super().__init__()
# 加载图像
self.image=pygame.image.load(img_name)
# 设置尺寸; get_rect()可以获取图像的原始大小
self.rect=self.image.get_rect()
# 设置速度
self.speed=speed
def update(self):
# 默认在屏幕上垂直方向移动
self.rect.y+=self.speed
main.py
from plane_sprites import *
pygame.init()
# 创建游戏的主窗口,只指定宽和高
screen=pygame.display.set_mode((512,768))
# 加载图像
bg=pygame.image.load("./img/bg1.jpg")
# 在屏幕上绘制图像
screen.blit(bg,(0,0))
# 定义英雄飞机
hero_img=pygame.image.load("./img/hero.png")
screen.blit(hero_img,(200,500))
# 创建游戏时钟
clock=pygame.time.Clock()
hero_rect=pygame.Rect(200,500,120,79)
# 创建敌机的精灵
enemy1=GameSprites("./img/enemy1.png")
enemy2=GameSprites("./img/enemy1.png",2)
# 将精灵放入精灵组
enemy_group=pygame.sprite.Group(enemy1,enemy2)
while True:
# 设置每秒刷新60次
clock.tick(60)
hero_rect.y-=1
if hero_rect.bottom <= 0:
hero_rect.top = 768
screen.blit(bg,(0,0))
screen.blit(hero_img,hero_rect)
# 精灵组调用两个方法,更新位置和在屏幕上绘制精灵
enemy_group.update()
enemy_group.draw(screen)
pygame.display.update()
# 监听用户点击关闭按钮
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
# 退出系统
exit()
**定时器
**
语法
"""
第1个参数 事件代号 需要基于常量 pygame.USEREVENT 来指定,
USEREVENT 是一个整数,再增加的事件可以使用 USEREVENT+1 指定,依次类推.
第2个参数是 事件触发 间隔的毫秒值.
"""
set_timer(eventid,milliseconds) ——>None
示例
# 自定义事件
EVENT_ENEMY=pygame.USEREVENT
# 添加定时器,每秒执行一次自定义事件
pygame.time.set_timer(EVENT_ENEMY,1000)
# 监听事件
while True:
for event in pygame.event.get():
# 监听自定义事件
if event.type == EVENT_ENEMY:
print("自定义事件触发了...")
# 监听退出事件
if event.type == pygame.QUIT:
# 卸载模块
pygame.quit()
# 退出系统
exit()
键盘按键捕****获
第一种方式语法
if event.type== pygame.KEYDOWN and event.key==pygame.K_RIGHT:
print("向右移动...")
第二种方式语法
# 返回所有按键的元组,如果某个按键按下,对应的值是1
keys_pressed=pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
print("向右移动...")
碰撞检测
groupcollide(group1,group2,dokill1,dokill2,collided=None)——> Dict[Sprite, Sprite]
spritecollide(sprite,group,dokill,collided=None)——> List[Sprite]
绘制字体
**示例:
**
# 第一个参数是字体名,第二个大小
# 字体文件可以在自己的系统中查找,然后拷贝到 代码同级目录下即可。
# 字体文件路径,以下以win7为例:C:\\Windows\\Fonts\\微软雅黑
my_font = pygame.font.Font("msyh.ttf",58)
# 第一个参数是写的文字;
# 第二个参数是个布尔值,以为这是否开启抗锯齿,就是说True的话字体会比较平滑,不过相应的速度有一点点影响;
# 第三个参数是字体的颜色;
# 第四个参数是背景色,如果你想没有背景色(也就是透明),那么可以不加这第四个参数。
ext_surface = my_font.render("Pygame Score! ", True, (0,0,0), (255, 255, 255))
# 在屏幕上绘制字体,第一个参数是字体对象,第二个参数是x,y轴的位置
screen.blit(text_surface, (0, 0))
# 刷新屏幕
pygame.display.update()
播放音****乐
示例
# 方式一 ,加载背景音乐
pygame.mixer.music.load("./music/bg.mp3") # 加载背景音乐
pygame.mixer.music.set_volume(0.5) # 设置音量,音量值在 0~1 区间
pygame.mixer.music.play(-1) # 播放音乐,参数是一个正整数,表示具体循环次数, -1 则表示无限循环
# 方式二 ,加载短音效,如 爆炸,发射子弹等
boomMusic = pygame.mixer.Sound("./music/boom.mp3") # 加载背景音乐
boomMusic.set_volume(0.3) # 设置音量,音量值在 0~1 区间
boomMusic.play() # 播放音乐,参数是一个正整数,表示具体循环次数, 不填写,默认是一次
全部0条评论
快来发表一下你的评论吧 !