开始游戏项目:创建pygame窗口及响应用户输入

开始开发游戏《外星人入侵》吧。首先要创建一个空的Pygame窗口,供之后用来绘制游戏元素,如飞船和外星人。我们还将让这个游戏响应用户输入,设置背景色,以及加载飞船图像

系列文章目录

一、Pygame的安装与项目规划


创建Pygame游戏窗口及响应用户输入

        下面将创建一个表示游戏的类,以及创建空的Pygame窗口。为此,在文本编辑器中新建一个文件,将其保存为alien_invasion.py,再输入如下代码:

import sys

import pygame
class AlienInvasion:
    """管理游戏资源和行为的类"""
    def __init__(self):
        """初始化游戏并创建游戏资源"""
        pygame.init()

        self.screen = pygame.display.set_mode((1200, 800))
        pygame.display.set_caption("ALien Invasion")

    def run_game(self):
        """开始游戏的主循环"""
        while True:
            #监视键盘和鼠标的动作
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()

            #让最近绘制的屏幕可见
            pygame.display.flip()
            。3

if __name__ == '__main__':
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()

下面我们进行分步讲解:

        一、 pygame.display模块

                该模块是pygame中用于控制窗口和屏幕显示的模块

其主要函数如下:

                

                 1.1 pygame.display.set_mode( )函数

                        该函数的主要作用为初始化一个准备显示的窗口或屏幕,Pygame在任何时间内都只允许有一个显示界面。使用Pygame.display.set_mode( )传入flags参数来控制的。这个参数主要为:set_mode(resolution=(0,0), flags=0, depth=O) -> Surface

这个函数将创建一个Surface对象的显示界面。传入的参数用于指定显示类型。最终创建出来的显示界面将是最大可能地匹配当前操作系统。
resolution参数是一个二元组,表示宽和高。flags参数是附件选项的集合。depth 参数表示使用的颜色深度。
返回的Surface对象可以像常规的Surface对象那样去绘制,但发生的改变最终会显示到屏幕上。

flags参数指定你想要的显示类型。提供几个选择给你,你可以通过位操作同时使用多个类型(管道操作符")。如果你传入0或没有传入flags参数,默认会使用软件驱动窗口。这儿是flags参数提供的几个可选项︰

                 1.2 pygame.set_caption( )函数

                     该函数的实参可以只是单独的字符串,也可以有其他参数。主要作用为设置当前窗口,也就是之前的surface的标题栏                    1.3 pygame.display.flip( )函数

                更新整个待显示的Surface对象到屏幕上。

 也就是说,在开始游戏(即本章中的run_game函数中)后,该部分必须要有pygame.display

.flip( )函数。在这里,他在每次执行while循环后都会绘制一个屏幕,并且擦去旧屏幕。即我们常说的刷新

         二、 pygame.event模块

本模块用于处理事件与事件队列的pygame模块。

Pygame通过事件队列控制所有的时间消息。该模块中的程序将帮你管理事件队列。输入队列很大程度依赖于pygame的display模块。如果display 没有被初始化,显示模式没有被设置,那么事件队列就还没有开始真正工作。

常规的队列是由 pygame.event.EventType定义的事件对象的组成,有多种方法来访问里边的事件对象从简单的检测事件是否存在,到直接从栈中获取它们。

下边是每个事件类型以及对应的成员属性列表:

                2.1 pygame.event.get( )函数

                        从队列中获取事件。

get() -> Eventlist

get(type)-> Eventlist

get(typelist) -> Eventlist
这将获取并从队列中删除事件。如果指定一个或多个type参数,那么只获取并删除指定类型的事件。
请注意,如果你只从队列中获取和删除指定的事件,那么久而久之,队列可能被你不关注的事件所填满。

                   

猜你喜欢

转载自blog.csdn.net/m0_64660514/article/details/122094010