黑马——飞机大战学习(1)
游戏第一印象:
1.把一些 静止的图像 绘制在游戏窗口中
2.根据用户的交互 或其他情况,移动这些图像,产生 动画化效果
3.根据图像之间是否发生 重叠 ,判断敌机是否被摧毁 等其他情况
一、使用pygame创建图形窗口
1.游戏的初始化和退出


2.游戏中的坐标系

坐标系:
原点在左上方
x轴水平方向向右,逐渐增加
y轴垂直方向向下,逐渐增加
# 在游戏中,所有可见的元素都是以矩形区域来描述位置的
矩形区域的描述

# pygame 专门提供了一个类 pygame.Rect 用于矩形区域
![]()
^size属性会返回一个元组(width,height)
# 案列演练

^pygame.Rect()是一个比较特殊的类,neibu只封装了一些数字计算
^只执行pygame.init()方法同样能够直接使用
3.创建游戏的主窗口
# pygame专门创建了一个模块pygame.display用于创建,管理游戏窗口

(1)set_mode----创建游戏显示窗口
![]()
参数:
%resolution=(wight,height),默认窗口大小和屏幕大小一致
%flags参数指定屏幕的附加选型,例如是否全屏等等,默认不需要传递
%depth参数bianshi颜色的位数,默认自动匹配
返回值:
%暂时可以理解为 游戏的屏幕, 游戏的元素 都需要被绘制在 游戏的屏幕上
#必须使用变量记录set_mode的返回结果!!!(后续所有的图像绘制在这个返回结果上)
%创建游戏主窗口

二,理解图像并实现图像绘制
# 在游戏中,能够看到的游戏元素大多是图像
图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存zh
# 要在屏幕上看到某一个图像的内容,:
(1)使用pygame.image.load()加载图像的数据
(2)使用游戏屏幕对象,调用blit方法将图像绘制在指定位置
(3)调用pygame.display.update()方法更新整个屏幕的显示

1.绘制背景图像

2.绘制英雄图像

三、理解游戏循环和游戏时钟
1.游戏中的动画实现原理
# 一般在电脑上每秒60次,就能达到连续高品质的动画效果。(每个静止的画面称为帧)
2.游戏循环 -- >意味着游戏的正常开始!

作用:
1.保证游戏不会接退出
2.变化图像位置--动画效果
每隔1/ 60秒移动下所有图像的位置
调用pygame. display. update()更新屏幕显示
3.检测用户交互--按键、鼠标等..
3.游戏时钟
# pygame专门提供了一个类pygame. time. Clock可以非常方便的设屏幕绘制速度--刷新帧率.
# 要使用时钟对象需要两步:
1)在游戏初始化创建-一个时钟对象

2)在游戏循环中让时钟对象调用tick(帧率) 方法
tick方法会根据上次被调用的时间,自动设置游戏循环中的延时

4.英雄图像的简单动画
需求
1).在游戏初始化定义一个 pygame.Rect 的変量记录英雄的初始位置
2).在游戏循环中毎次让英雄的 y-1 ,向上移动
3).y<=0 将英雄移动到屏幕的底部


提示::
毎一次調用update方法之前,需要把所有的游戏图像都新絵制一遍
而且应该最先重新绘制背景图像
# 判断飞机完全消失,在回到底部

5.在游戏循环中“监听”事件
事件event
就是游戏启动后,用户针对游戏所做的操作
例如:点击关闭按钮,点击鼠标,按下键盘...
监听
在游戏循环中,判断用户具体的操作
只有捕获到用户具体的操作,才能有针对性的做出响应
代码实现
1.pygame中通过pygame. event.get()可以获得用户当前所做动作的事件列表。用户可以同一时间做很多事情

2.捕获到用户具体的操作,才能有针对性的做出响应 (检测到关闭按钮)

提示:
这段代码非常的固定,几乎所有的pygame 游戏都大同小异!
四、理解精灵和精灵组
1.精灵类和精灵组
# pygame 提供了两个类
pygame. sprite.Sprite -- 存储图像数据image,位置和大小 rect 的对象
pygame.sprite.Group


2.派生精灵
1). 新建 plane_sprites.py 文件
2). 定义GameSprite 継承自 pygame. sprite. Sprite

特性:
image精灵图像,使用 image_name 加载
rect 精灵大小,默认使用图像大小
speed精灵移动速度,默认为1
方法:
update 每次更新屏幕时在游戏循环内调用
让精灵的 self.rect.y += self.speed
提示:
image的 get_rect()方法,可以返回 pygame.Rect(0,0,图像宽,图像高)的对象

注意:
如果一个类的父类不是object
在重写初始化方法吋,一定要先super() 下父类的_init_ 方法。保证父类中实现的_init_代码能够被正常执行
3.使用游戏精灵和精灵组创建敌机
需求:
使用刚刚派生的游戏精灵和精灵组创建故机井且实现敌机动画步骤
步骤
1). 使用 from导入plane_sprites 模块
from导入的模块可以直接使用
import 导入的模块需要通过 模块名.来使用
2). 在游戏初始化创建精灵对象和精灵组对象

3).在游戏循环中让精灵组分别调用update()和draw(screen)方法职责

# 精灵
封装图像image、位1 rect和速度speed
提供update()方法,根据游戏需求,更新位rect
# 精灵
包含多个精灵对象
update方法,让精灵组中的所有精灵调用update方法更新位置
draw(screen)方法,在screen上绘制精灵组中的所有精灵

浙公网安备 33010602011771号