开发目标:飞机大战
需要资源:飞机大战需要的各种资源图片
游戏原理:~让图片产生动画,动画效果还原游戏场景!
操作细节:让图片在很短的时间进行切换,完成一个模拟动画的效果!
需要技术:pygame:python中提供的专门用于游戏开发的一个模块!
不是系统标准模块,第三方模块
安装第三方模块:命令行~
windows:管理员权限运行命令行-: pip install pygame
pip: python install package
pygame快速入门
pygame游戏模块
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()函数中,重写边界判断,一旦超出边界~移除自己!
敌方飞机~类型,敌人精灵-> 创建多个敌人-> 精灵组-> 渲染展示窗口中!
多长时间出现一个敌机?定时
出现的位置?顶部随机