黑马——飞机大战学习(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上绘制精灵组中的所有精灵

 

posted @ 2020-08-18 21:27  七岁老太太  阅读(227)  评论(0)    收藏  举报