Python_游戏窗口

1. 游戏的初始化和退出

Python_游戏窗口

介绍一下怎么样使用来创建一个图形窗口,要做游戏开发,有一件非常重要的工作,就是把不同的图片素材画到游戏的窗口上,如果没有游戏的窗口,就不能来画这些图片素材.

因此要进行游戏开发, 第1件事情应该先学习一下怎么样创建游戏的主窗口,

Python_游戏窗口

但是要学习创建游戏的主窗口,有两个小的知识点,

Python_游戏窗口

需要学习一下,第1个先需要知道一下pygame的初始化和退出,然后呢,需要知道一下pygame中的坐标.

所谓坐标系,用大白话来讲, 就是通过坐标系,可以明确的知道把这个图片素材画在窗口的什么位置,当这两个知识点知道之后,再介绍一下怎么样使用来创建一个游戏的主窗口.

目的和步骤明确之后,先来看一下游戏的初始化和退出,

Python_游戏窗口

在使用pygame 这个模块时, 有两个方法的调用是非常固定的,这两个方法就是一个初始化方法,

一个退出方法,那现在先看一下初始化方法,

Python_游戏窗口

在使用pygame 其他模块之前,第1个要调用的方法就是初始化方法,因为初始化方法可以把pygame 的其他模块导入并且进行初始化.只有导入并且初始化之后, 才可以使用pygame 提供的其他模块.

记住在使用pygame 之前, 第1步就要做初始化的动作,当初始化执行完成之后,就可以在下方来编写游戏的代码了,这是要做的第1件事情.

Python_游戏窗口

当游戏的主角挂掉之后,整个游戏就game over了, 当游戏在结束之前,还需要用另外一个方法quit(),quit() 这个方法可以把之前加载的所有模块全部做一个卸载,这样呢就可以及时释放出内存中的空间,这就是初始化和退出的作用.

Python_游戏窗口

既然要使用pygame来开发游戏,第1步应该先把pygame这个模块导入进来,

Python_游戏窗口

导入进来之后,在使用pygame 开发之前, 第1个要调用的方法是初始化方法,

Python_游戏窗口

初始化方法负责加载pygame 的所有模块并且初始化.

当初始化方法执行完成,就可以在下方啊来编写游戏的代码,

Python_游戏窗口

在当游戏的主角挂掉了,游戏game over了,需要调用一个quit() 方法,quit() 方法就可以把pygame的所有模块做一个卸载,

Python_游戏窗口

这样呢,就可以及时释放出内存空间.

这样就在快速体验代码中,把pygame非常固定的代码编写了一下.

现在运行一下程序,控制台输出了游戏的代码,

Python_游戏窗口

现在执行的效果跟之前编写的代码貌似一模一样,但是主要现在的代码做了两件非常重要的事情,第1步是加载并且初始化的所有模块,第2步呢,就是在游戏终止之前, 把加载并且初始化的所有模块做一个卸载的动作, 这个就是pygame的初始化和退出.

2. pygame 坐标系

介绍一下游戏中的坐标系,首先要重点强调一下,只有明确了坐标系之后,才能够在一个游戏窗口的准确位置来绘制需要的图像.

Python_游戏窗口

那么在pygame中坐标系是怎么样来制定的呢?之前提到过, 在做游戏开发时,一个重要的工作就是在游戏窗口的不同位置来绘制不同的图形,先画一个大的红色框框,假设这个红色的框框就是创建出来的游戏窗口,

Python_游戏窗口

当一个游戏窗口有了之后,就把游戏窗口的左上角设置为坐标系的原点.

所谓原点啊,就是水平方向的数值是0,垂直方向的数值同样也是零,这个就是坐标系的原点.

当坐标系的原点确定之后,如果要指定水平方向的数值,就从原点出发,从左向右水平方向的数值依次递增,在开发时,通常会把水平方向叫做x轴,那垂直方向指定道理是相同的,同样是从原点出发,就从上向下依次递增,通常用y轴来表示垂直方向的数值.

坐标系有三个重要的元素,原点, 在游戏窗口的左上角,原点的数值是0和0.

要表示水平方向, 用x轴来表示水平方向的数值, 从左向右依次递增,要表示垂直方向,用y轴来表示,y轴的数值从上向下依次递增,那现在来看一下,假设屏幕中,这个小的方块是要绘制的英雄图像,

Python_游戏窗口

要指定英雄图像的位置,可以先指定一下水平方向的位置,比如把x值指定为100, 100呢就是距离屏幕左侧有100个点,那如果把y值指令为500, 500就表示小飞机的顶部距离屏幕的顶部有500个点,这就是坐标系的作用.

但是单纯指定左侧的距离以及距离顶部的距离,不能够准确的描述出小飞机, 还差一点东西.

在开发游戏的时候,所有能够见到的元素都是以矩形区域来描述的,刚刚介绍坐标系,已经能够确定小飞机在屏幕的左上角的位置, 那么要描述小飞机的准确大小还需要 宽度和高度, 因为只有知道了准确的宽度和准确的高度,才能够在屏幕的这一个区域来绘制小飞机的图像,因此啊在游戏中所有可见的元素都是以矩形区域来描述的,

Python_游戏窗口

一句话讲, x和y来指定这个元素的左上角坐标位置, 宽和高来指定这个元素的大小.

3. pygame.Rect 描述举行区域

介绍一下,pygame 这个模块中专门提供了一个用来描述矩形区域的类, 叫做pygame.Rect.

Python_游戏窗口

在一个游戏中所有能够看到的家伙,都可以用一个矩形来表示.

那么在pygame 中为了方便游戏开发,专门针对矩形区域,提供了一个特殊的类, pygame.Rect, 通过这个类就可以非常方便的创建出一个矩形对象,当有了矩形对象之后,通过对象点的方式, 就可以方便的访问到对象内部的属性了.

先看一下创建对象的语法, 要创建一个对象,就在小括号内部顺序的来指定一下x的数值,y的数值以及宽度和高度,这样就可以创建出一个矩形的对象.

Python_游戏窗口

那当有了矩形对象之后,通过对象点,就可以访问到对象的x属性, y属性,或者宽度属性和高度属性.

在这张类图中还有一些其他的属性,

Python_游戏窗口

这些属性会在后续的案例演练中演示一下具体的使用.

要重点介绍一个属性,size属性,从字面上来看size有尺寸, 大小的意思.

当要访问一个矩形对象的size属性时,会返回一个元组,元组的第1个值是矩形的宽度, 元组的第2个值是矩形的高度.

那紧接着就使用Rect 类来做一个简单的案例演练,先来看一下演练需求,

Python_游戏窗口

定义一个hero_rect 的对象,让这个矩形对象描述一下英雄飞机的位置和大小,然后再输出一下英雄的坐标原点以及英雄的尺寸.

在pygame的模块中,Rect 是一个非常特殊的类,

Python_游戏窗口

因为这个类内部只是封装了一些数字计算而已,所以在开发中如果想要使用这个类, 并不需要让pygame 去调用__init__方法,因为__init__方法主要是针对图像的绘制, 窗口的处理等等这些模块进行初始化的.

而对于一些简单的数字计算,Rect 这个类是可以直接使用的.

那接下来完成一下案例演练,要使用pygame,首先还是使用import 来导入一下pygame 这个模块,然后第1步应该创建一个矩形区域,那现在就给矩形区域的变量起个名字hero_rect ,然后要创建对象,在小括号内部依次来指定一下 x , y, 宽, 高,

Python_游戏窗口

一个矩形对象创建完成,紧接着应该使用print函数,把矩形对象中的x值, y值做一个输出, 宽度, 高度再做一个输出.

就写一下英雄的原点,第一个%d,输出一下x的值,第2个%d,输出一下y 的值, 跟上一个元组, 在小括号内部, 首先使用hero_rect 来找到x 这个属性,在使用hero_rect 来找到y 属性.

一个简单的输出完成,

Python_游戏窗口

先运行一下程序,

Python_游戏窗口

控制台输出了英雄的原点,在x值是100, y值是500.

那现在再使用print 函数来输出一下英雄的尺寸,第一个%d 表示高度,第二个%d 表示宽度.

Python_游戏窗口

再来运行一下程序,控制台输出英雄的尺寸是120和125,

Python_游戏窗口

Rect 类中封装有一个元组的属性, 一个size的属性可以返回一个元组,

Python_游戏窗口

既然返回一个元组,而在使用格式字符串的时候,可以在百分号后面直接跟上一个元组,就再使用print 函数来输出一下英雄的尺寸,

Python_游戏窗口

再运行一下,控制台同样能够输出,宽度是120, 高度是125,

Python_游戏窗口

这个就是在Rect 类中封装的几个常用的属性.

4. 创建游戏窗口和游戏循环

介绍一下怎么样创建游戏的主窗口,在做游戏开发时,第1步应该先创建出一个游戏的窗口,

Python_游戏窗口

因为游戏开发中,最重要的就是向主窗口的不同位置来绘制不同的图像,那么在使用pygame 开发游戏时,怎么样创建出一个游戏的主窗口呢?

如果希望创建出一个主窗口,只需要使用pygame 提供的display这个模块, display有显示的意思.pygame 提供的display模块,就是专门用来创建和管理游戏窗口的.

同时如果希望创建出一个游戏窗口,只需要使用display这个模块提供了set_mode方法,set_mode 方法就可以初始化并且创建出一个游戏的窗口.

Python_游戏窗口

set_mode方法的语法,set_mode这个方法可以接收三个参数,

Python_游戏窗口

每个参数后面的等号表示什么含义,每个参数后面的等号表示, 这三个参数都是有缺省值的参数,在调用方法的时候这三个参数都可以不用传递.

set_mode方法可以接收三个参数,但是由于每个参数都有默认值,所以在调用方法时每个参数都可以不用传递.

再来看一下set_mode方法的返回类型,set_mode方法执行之后,会返回一个Surface,

Python_游戏窗口

Surface 从字面上来看有表面的意思, 现在可以把Surface理解成创建出来的游戏屏幕,也就是创建出来的游戏窗口,

Python_游戏窗口

在开发游戏时,最主要的应该先创建出一个游戏窗口,只有有了窗口之后,才能够把不同的图像绘制在窗口的不同位置,所以从这个角度来看set_mode方法返回的结果,必须要记录住.

只有记录住返回的窗口,才能够在这个窗口上绘制不同的图像,通过简单的介绍,看到set_mode方法可以创建窗口, 调用set_mode方法时可以传递三个参数,但是这三个参数都可以省略掉.

set_mode方法返回的结果就是创建出来的游戏窗口.

那现在使用set_mode方法来创建一个窗口,看看不传递任何的参数, 创建出来的是一个什么样的窗口,首先使用import 关键字来导入一下pygame 这个模块,

Python_游戏窗口

要使用pygame的其他模块,第1件事情应该先调初始化方法,初始化方法负责加载和初始化的所有模块,

Python_游戏窗口

当一个游戏结束之前, quit()要调用一下, quit()可以卸载掉pygame 所有的模块.

现在三句非常固定的代码写完,

Python_游戏窗口

现在把注意力集中在创建游戏窗口上,先写一下注释,创建游戏的窗口,要创建游戏窗口应该使用display 这个模块的set_mode()这个方法,set_mode()方法的三个参数可以不用传递, 但是set_mode()方法的返回结果必须要记录.

因为set_mode()方法返回的结果就是游戏的窗口,在后续需要在这个游戏窗口来绘制不同的图像.

Python_游戏窗口

就把光标放在第6行的开始,定义一个名字叫做screen的变量来接收一下set_mode()方法的返回结果,代码写完,

Python_游戏窗口

现在来运行一下程序,一个大大的黑窗口出现了,

Python_游戏窗口

但是咻的一下窗口又不见了,为什么一下黑窗口就不见了?因为Python的程序是从上向下顺序执行,执行到第8句代码程序就会被终止掉.

Python_游戏窗口

那怎么样能够保证程序暂时不会退出呢?只需要创建玩游戏的窗口之后在下方增加一个无限循环,只要这个无限循环不终止,游戏窗口就不会消失.

Python_游戏窗口

现在再运行一下程序,一个大大的黑窗口出现了,

Python_游戏窗口

但是飞机大战的游戏不需要显示这么大个窗口, 飞机大战的游戏只需要能够显示一个背景图片就可以, 那这张背景图片有多大呢?现在使用ubuntu的图像查看器来打开的背景图片,

Python_游戏窗口

Python_游戏窗口

那想要看图片的大小,只需要把光标移动到菜单栏,然后选择图像,再选择一下图像属性,

Python_游戏窗口

弹出一个小窗口,告诉背景图像宽度480,高度700个像素.

Python_游戏窗口

背景图像的大小宽度是480,高度是700,那现在先把这个程序终止一下,

Python_游戏窗口

set_mode 这个方法在默认时,创建了一个跟屏幕一样大的窗口,但是呢,现在希望的窗口大小是480×700的一个大小,

Python_游戏窗口

set_mode方法,接收的第1个参数叫resolution,这个参数的类型是一个元组类型,同时元组的第1个值就是希望创建的窗口宽度, 元组的第2个值就是希望创建的窗口高度.

Python_游戏窗口

宽, 高指定完成,

Python_游戏窗口

再来运行一下程序,大家看一个长方形的黑窗口出现了,

Python_游戏窗口

这个黑窗口就是未来飞机大战要运行的主窗口.

再看一下剩下两个参数表示什么含义,第2个参数flags, flags有标记的意思,通过这个参数,可以指定一些创建窗口的附加选项,所谓附加选项就是创建出来的窗口是否需要全屏,是否有边框等等,默认这个flags参数是不需要传递的.

再看一下第3个参数depth,depth 这个单词有深度的意思,而在游戏开发中,通常用depth 来表示颜色的位数,也就是16位真彩色,24位真彩色,32位真彩色等等.

但是depth 这个参数如果不传递, 默认会自动匹配,所以啊在使用set_mode 方法创建游戏窗口时只需要传递第一个参数.

Python_游戏窗口

第1个参数用一个元组来指定一下创建出来的窗口宽度和高度, 那现在再来看一下set_mode()方法的返回结果就是创建出来的游戏主窗口.

在后续所有的图像都需要绘制在游戏的主窗口中,所以在开发程序时, 必须要使用一个变量来记录一下set_mode 这个方法的返回结果,

Python_游戏窗口

同时还使用了一个无限循环,无限循环的作用是当游戏启动之后程序不会立即退出,否则一运行程序, 窗口一闪游戏就结束了.

Python_游戏窗口

这个无限循环啊,在游戏开发中有个专属的名字叫做游戏循环,在游戏循环中, 可以增加很多的游戏控制.

Original: https://blog.csdn.net/weixin_52073430/article/details/120172505
Author:
Title: Python_游戏窗口

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782109/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球