【pygame学习+实战】第二篇:怀旧——飞机大战

14天学习训练营导师课程:
李宁《Python Pygame游戏开发入门与实战》
李宁《计算机视觉OpenCV Python项目实战》1
李宁《计算机视觉OpenCV Python项目实战》2
李宁《计算机视觉OpenCV Python项目实战》3

前言

我第一次见到飞机大战是在我小学五年级下半学期的时候(2020年),这个游戏中可以说包含了几乎所有我目前可接触到的pygame知识。


在这里插入图片描述


一、python飞机大战

下面用一个简单的飞机大战游戏,串一下pygame基础知识。

1.1 音乐

这里列举一些常用函数,详细内容请到pygame官网查看。

  • pygame.mixer.music.load() :加载一个音乐文件用于播放;
  • pygame.mixer.music.play() :播放音乐;
  • pygame.mixer.music.rewind() :重新播放音乐;
  • pygame.mixer.music.stop() : 结束音乐播放;
  • pygame.mixer.music.pause() :暂停音乐播放;
  • pygame.mixer.music.unpause() :恢复音乐播放;
  • pygame.mixer.music.set_volume() :设置音量;
  • pygame.mixer.music.get_volume() : 获取音量。

1.2 精灵(spirte)

pygame场景里的动态物体都可视为精灵,如主角,敌人,子弹,可移动背景等等,换句话说,精灵就是一些动态图片,你要对这些图片进行一些交互操作,如移动,碰撞,爆炸等等。

Pygame提供了一个处理精灵的模块,也就是sprite(pygame.sprite)模块。我们使用该类Sprite来创建一个子类,真正达到处理精灵的目的,该子类提供了操作精灵的常用属性和方法,如下所示:

  • self.image:加载要显示的精灵,控制图片大小和填充颜色;
  • self.rect:精灵图片显示在哪个位置;
  • Sprite.update():刷新图,相应效果生效;
  • Sprite.add():添加精灵图到精灵组中(groups);
  • Sprite.remove():从精灵组中删除删除的精灵图;
  • Sprite.kill():删除精灵组中所有的精灵;
  • Sprite.alive():判断某个精灵是否属于精灵组。

当游戏中有大量的精灵时,操作它们将变得复杂,此时通过构建精灵容器(group 类)也就是精灵组来统一管理这些精灵。构建方法如下:

# 创建精灵组
group = pygame.sprite.Group()
# 向组内添加一个精灵
group.add(sprite1)

1.3 事件(键盘事件,鼠标事件)

键盘事件,这些会涉及到的日程安排操作,比如游戏批量的上下左右,或者人物中的前进、后继等操作,都需要键盘来配合执行。

一个事件的关键点,该事件可以进行连续的连续性控制。一个关键点、组合属性等以连续性的方式提供一系列事件,一系列常用的属性将通过一系列的连续性事件进行排序。

  • K_BACKSPACE:退格键(Backspace);
  • K_TAB:制表键(Tab);
  • K_CLEAR:清除键;
  • K_RETURN:回车键(Enter);
  • K_PAUSE:暂停键(Pause);
  • K_ESCAPE:退出键(Escape);
  • K_SPACE:空格键(空格);
  • K_DELETE:删除键(delete);
  • K_UP向上:箭头(向上箭头);
  • K_DOWN:箭头(向下箭头);
  • K_RIGHT:向左(右箭头);
  • K_LEFT:向左箭头(左箭头)。
  • KMOD_ALT:同时按下Alt键;

鼠标事件,Pygame 提供了三个鼠标事件:

  • pygame.event.MOUSEMOTION:鼠标移动事件;
  • pygame.event.MOUSEBUTTONUP:鼠标键释放事件;
  • pygame.event.MOUSEBUTTONDOWN:鼠标键按下事件。

1.4 碰撞检测

  • pygame.sprite.collide_rect():精灵之间的矩形检测,即两个矩形区域是否有交汇,返回一个布尔值;
  • pygame.sprite.collide_circle():两个精灵之间的圆形检测,即圆形区域是否有交汇,返回一个布尔值;
  • pygame.sprite.collide_mask():两个精灵之间的像素蒙版检测,更为精准的一种检测方式;
  • pygame.sprite.spritecollide():精灵和精灵组之间的矩形碰撞检测,一个组内的所有精灵会逐一地对另外一个单个精灵进行碰撞检测,返回值是一个列表,包含了发生碰撞的所有精灵;
  • pygame.sprite.spritecollideany():精灵和精灵组之间的矩形碰撞检测,上述函数的变体,当发生碰撞时,返回组内的一个精灵,无碰撞发生时,返回 None;
  • pygame.sprite.groupcollide():检测在两个组之间发生碰撞的所有精灵,它返回值是一个字典,将第一组中发生碰撞的精灵作为键,第二个组中发生碰撞的精灵作为值。

1.5 更新

  • pygame.display.update()
  • pygame.display.flip()

flip函数将重新绘制整个屏幕对应的窗口。update函数仅仅重新绘制窗口中有变化的区域。如果仅仅是几个物体在移动,那么他只重绘其中移动的部分,没有变化的部分,并不进行重绘。

update比flip速度更快。因此在一般的游戏中,如果不是场景变化非常频繁的时候,建议使用update函数,而不是flip函数。

1.6 总结及源码

pygame可用函数有很多,但是真的不难,用文字讲述很麻烦,所以我只是列举了一些常用函数与方法,当你用到的时候记得去官网或者百度搜搜就可以了,把完整代码附在下面,仅供参考:

# 导入两个库
import pygame
import random

# 常量,屏幕宽高
WIDTH, HEIGHT = 800, 600
# 初始化操作
pygame.init()
pygame.mixer.init()
# 创建游戏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置游戏标题
pygame.display.set_caption('飞机大战')

# 添加音乐
pygame.mixer.music.load('./sound/bgLoop.wav')
pygame.mixer.music.set_volume(0.5)  # 音量
pygame.mixer.music.play(-1, 0)

# 添加系统时钟,用于设置帧的刷新
FPS = 40
clock = pygame.time.Clock
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘较瘦

打赏即动力,打赏即鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值