Python学习笔记(二十九)

项目实战--飞机大战

 

强化面向对象程序设计

体验使用pygame模块进行游戏开发

 

实战步骤

1、pygame快速体验

2、飞机大战实战

 

确认模块 - - pygame

pygame 就是一个python模块,转为电子游戏设计的

 

提示:要学习第三方模块,通常最好的参考资料就在官方网站

 

安装pygame

pip install pygame

 

验证安装

python -m pygame.examples.aliens

 

pygame 快速入门

 

目标

1、项目准备

2、使用pygame创建图形窗口

3、理解图像并实现图像绘制

4、理解游戏循环和游戏时钟

5、理解精灵和精灵组

 

项目准备

1、新建飞机大战项目

2、新增一个文件

3、导入游戏素材图片

 

游戏的第一印象

把一些精致的图像绘制到游戏窗口中

根据用户的交互或其他情况,移动这些图像,产生动画效果

根据图像之间是否发送了重叠,判断敌机是否被摧毁等其他情况

 

使用Pygame创建图形窗口

小结目标

 

1、游戏的初始化和退出

2、理解游戏中的坐标系

3、创建游戏主窗口

4、简单的游戏循环

 

可以将图片素材绘制到游戏的窗口上,开发游戏之前需要先知道如何建立游戏窗口!

游戏的初始化和退出

要使用pygame提供的所有功能之前,需要调用init方法

在游戏结束前需要调用一下quit方法

 

pygame.init() 导入并初始化所有pygame模块、使用其他模块之前,必须先调用init方法

pygame.quit() 卸载所有pygame模块,在游戏结束之前调用

 

理解游戏中的坐标系

坐标系

 原点在左上角(0,0)

X轴水平方向向右,逐渐增加

Y轴水平方向向下,逐渐增加

 

在游戏中,所有可见的元素,都是以矩形全区域来描述位置的

要描述一个矩形区域有四个要素(X, Y, )(width, height)

 

pygame专门提供了一个类pygame.Rect用于描述矩形区域

 

Rect(x, y, width, height)

Pygame.Rect

size属性,会返回元祖

返回宽,高

 

pygame.rect是一个比较特殊的类,内部只提供了一些数字计算

不执行pygame,init()方法同样能够直接使用

 

需求

1、定义矩形描述英雄的位置和大小

2、输出英雄的坐标原点

3、输出英雄的尺寸(宽度和高度)

 

创建游戏主窗口

pygame专门提供了一个模块pygame.display用于创建、管理游戏窗口

 

方法

pygame.display.set_mode() 初始化游戏展示窗口

pygame.display.update() 刷新屏幕内容显示

 

set_mode方法

作用是创建游戏展示窗口

 

参数

resolution 指定屏幕的宽和高,默认创建的窗口大小和屏幕大小一致

flags参数指定屏幕的附加选项,例如是否全屏等等,默认不需要传递

depth参数表示颜色的位数,默认自动匹配

 

返回值

暂时可以理解为游戏的屏幕,游戏的元素都需要被绘制到游戏的屏幕上

 

注意:必须使用变量记录set_mode方法的返回值!因为后续所有的图像绘制都基于这个返回结果

 

创建主窗口

screen = pygame.display.set)mode(400,700)

 

简单的游戏循环

为了做到游戏程序启动后,不会立即退出,通常会在游戏程序中增加一个游戏循环

所谓游戏循环就是一个无限循环

在创建游戏窗口代码下方,增加一个无限循环

 

注意:游戏窗口不需要重复创建

 

理解图像并实现图像绘制

 

在游戏中,能够看到我的游戏元素大多都是图像

图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存

要在屏幕上看到某一个图像的内容,需要按照三个步骤

1、使用pygame.image.load()加载图像的数据

2、使用游戏屏幕对象,调用blit方法将图像绘制到指定位置

3、调用pygame.display.update方法更新整个屏幕的现实

 

pygame.image.load(文件路径)

pygame.Surface.blit(图像,位置)

最后update刷新

 

提升:要想在屏幕上看到绘制的结果,就一定要调用pygame.display.update()方

绘制英雄图像

 

1、先加载创建英雄飞机

2、将飞机绘制在屏幕的(200,500)位置

3、调用屏幕更新显示飞机图像

 

透明图像

png格式的图像是支持透明的

在绘制图像时,透明区域是不会显示任何内容

但是如果下方已经有内容,会透过透明区域显示出来

 

 

理解update()方法的作用

可以在screen对象完成所有的blit方法之后,统一调用一次display.update方法

同样可以在屏幕上看到最终的绘制结果

 

使用display,set_mode()创建的screen对象是一个内存中的屏幕数据对象

可以理解成是油画的画布

screen.blit方法可以在画布上绘制多图像

例如

英雄,敌机,子弹

这些图像有可能会彼此重叠或者覆盖

display.update()会将画布的最终结果绘制在屏幕上,这样可以提高屏幕绘制效率,增加游戏的流畅度

 

posted @ 2022-06-11 10:15  黑羽青衣  阅读(30)  评论(0编辑  收藏  举报