- 主要内容
- 游戏开发
- 面向对象的编程(设计开发)练习
- 项目的开发流程和步骤
- 阶段项目开发:图形化游戏项目
- 飞机大战/坦克大战/贪吃蛇/打砖块/俄罗斯方块.
- 课堂笔记
- 准备工作
开发目标:飞机大战
需要资源:飞机大战需要的各种资源图片
游戏原理:~让图片产生动画,动画效果还原游戏场景!
操作细节:让图片在很短的时间进行切换,完成一个模拟动画的效果!
需要技术:pygame:python中提供的专门用于游戏开发的一个模块!
不是系统标准模块,第三方模块
安装第三方模块:命令行~
windows:管理员权限运行命令行-: pip install pygame
pip: python install package
pygame快速入门
pygame游戏模块
- 安装:pip install pygame
- 任意游戏
- 游戏开始时:加载pygame中各种资源:pygame.init()
- 游戏结束时:卸载pygame中各种资源:pygame.quit()
- 游戏界面
- 游戏窗口:pygame.display模块进行处理操作
- set_mode(area, flags, depth):窗口对象
- area:游戏区域,元组(宽度,高度)
- flags:整数参数,控制是否全屏等..
- depth:图片颜色深度[8bit/16bit/24bit/32bit]
- set_caption(title_name)
- title_name:游戏窗口标题
- set_mode(area, flags, depth):窗口对象
- 加载图片:pygame.image
- load(path):将指定路径的图片,添加到内存中
- 渲染图片
- 窗口对象.blit(img, (x, y)):添加一个图片到游戏窗口的某个位置
- 窗口对象.update():将添加到游戏窗口的对象,渲染到界面上展示
- 游戏窗口:pygame.display模块进行处理操作
- 游戏资源位置对象:pygame.Rect(left, top, width, height)
2D游戏中,所有的游戏资源都有四个具体的数据表示它在屏幕中的展示
距离屏幕左边的距离:left 也称为x坐标
距离屏幕上边的距离:top 也称为y坐标
资源本身的宽度:width
资源本省的高度:height
pygame中提供了一个用于表示这四个数据的对象:位置对象:pygame.Rect
rect = pygame.Rect(x, y, width, height)
获取左边的距离:rect.left | rect.x
获取上边的距离:rect.top | rect.y
获取元素的尺寸:rect.size
获取中间的位置:rect.centerx | rect.centery
位置对象Rect可以直接在屏幕对象的blit(资源, 位置)中进行使用
screen.blit(hero, (196, 500))à screen.blit(hero, hero_rect)
- 游戏核心操作
游戏运行过程中-> 核心~图片在运动-> 大量的图片在运动
-
-
-
-
- 抽象:图片在运动
-
-
-
游戏:图片、位置、速度
pygame将所有的任意的游戏操作开发中用到的对象:封装一个类型
精灵对象[图片、位置、速度][更新]
pygame.sprite.Sprite
QUSTION:如果游戏中出现了大量的图片~每个图片都是一个精灵对象~
精灵组对象[添加精灵]->更新->渲染->将组中的所有精灵,全部渲染到窗口中!
pygame.sprite.Group
更新(update->调用所有精灵对象update)、渲染draw(screen)
所有的2D游戏开发:都是图片的转换!
图片对象[图片路径、位置、运动速度][ 更新位置 ]
游戏精灵对象——表示2D游戏中,任意的一个游戏元素
为了方便我们操作大量的游戏元素[游戏精灵]:精灵组对象
精灵组对象管理游戏中出现的所有精灵对象!
- 游戏正式开始
游戏背景处理:
游戏背景的运动,需要两张一样的图片上下叠加,完成整体运动效果图。
游戏背景:也是游戏资源的一种,所以让 背景 继承游戏精灵类型
游戏背景类型中,初始化方法定义背景的图片信息,重写update()方法完成自定义运动
windows中pygame的安装 pip install pygame easy_install pygame python -m pip install pygame python -m easy_install pygame
ubuntu中pygame的安装 python的标准模块中不包含pip,需要单独安装 apt-get install python-pip 安装python2的pip apt-get install python3-pip 安装python3的pip
pip install pygame 安装给python2环境的模块 pip3 install pygame 安装给python3环境的模块 |
- 英雄飞机出场
我方英雄飞机,也是游戏资源的一种
但是运动方式需要通过键盘进行控制
英雄飞机~也定义成一种类型,继承游戏精灵类型,速度设置0,暂时不重写update()方法
- 事件操作
事件:发生的一个操作行为,如用户按下了鼠标左键!
操作:事件的响应,事件发生之后的处理方式[函数/方法]
pygame处理事件:pygame.event
获取所有的当前窗口中发生的事件:pygame.event.get() -> list
pygame对于键盘的交互方式,提供pygame.key
完成对用户键盘按下、抬起,按住等各种事件的直接处理
- 控制游戏刷新帧
常规情况下,当画面每秒刷新24+以上,肉眼看到连续的动画!
正常游戏处理过程中,要求画面刷新帧在50+以上!
个人PC屏幕刷新60~
pygame怎么控制游戏的刷新帧
默认情况,没有控制:循环游戏场景会短时间以最大的速度循环!极浪费系统性能
pygame提供了一个时钟操作:通过时钟操作~精确控制循环刷新帧
pygame.time
time.tick(每秒刷新帧) 让当前循环游戏场景每秒运行几次
主要定义在游戏场景循环中,用于控制游戏场景刷新!
- 英雄子弹操作
子弹:一个独立的对象,依赖于英雄飞机
所以将子弹精灵组对象,做成英雄飞机的一个属性
子弹:如果飞出边界~销毁
销毁一个对象[python中如果一个对象不再使用自动销毁(没有变量指向)]
pygame提供了精灵对象的操作方式
可以将对象自己从精灵组中移除同时销毁
可以调用对象的kill()函数!
在子弹的继承的update()函数中,重写边界判断,一旦超出边界~移除自己!
- 敌方飞机出场!
敌方飞机~类型,敌人精灵-> 创建多个敌人-> 精灵组-> 渲染展示窗口中!
多长时间出现一个敌机?定时
出现的位置?顶部随机
- 定时器:间隔一定的事件,自动触发操作[事件]
- 自定义事件:pygame不可能包含所有游戏中可能发生的行为,所以提供了一个自定操作的事件:pygame.USEREVNET,确保用户在操作过程中,不会和系统中自己的事件冲突!