Python学习笔记之实战小项目--飞机大战游戏(二)

      更多python相关的实战小项目以及学习资源,可关注微信公众号:noobcoders ,定期分享python学习笔记以及实战小项目,并附带详细的代码。

                                                  

       在上次的飞机大战游戏(一)中,我们实现了飞机大战游戏中的游戏背景和英雄角色的绘制,但是初步显示的效果是静止的,而我们最终想要实现的是动画显示,这也是本次笔记的主要内容。


01

学习目标

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

        2、理解精灵和精灵组


02

开发环境

            PyCharm2018.1.4

            python2.7

            pygame库


03

动手演练

一、游戏中的动画原理

       利用人眼的视觉停留,在游戏屏幕上快速地进行图像绘制,人眼分辨不出来便形成动画效果。

       一般在电脑上每秒绘制60次,就能够实现高品质的连续的动画效果。


二、游戏循环的主要作用

       1、保证游戏在正常情况下不会退出

       2、在循环过程中,对图像位置不断

             进行更新,形成动画效果

       3、检测用户交互事件


三、游戏时钟

       1、pygame库专门提供了一个 pygame.time .Clock类,利用这个类,只需两步我们就可以设置图像的刷新帧率。

       (1) 创建一个时钟对象

       (2) 时钟对象调用tick()方法

clock = pygame.time.Clock()

再在游戏循环中添加:

clock.tick(60)  #设置刷新频率


四、英雄hero的简单动画实验

        要求:

        (1) 在初始化时定义一个hero_rect变量

              记录英雄的pygame.Rect()

        (2) 在游戏循环中,让hero的y-1,

              实现向上移动

        (3) 当y=0时,把英雄移动到屏幕底部

# 设置hero起始位置
hero_rect = pygame.Rect(200500102126)


 hero_rect.y -= 1  # 对飞机位置进行移动
    if hero_rect.y == 0:
        hero_rect.y = 700

    # 绘制图像
    game_screen.blit(background, (00))
    game_screen.blit(hero, hero_rect)


五、游戏循环中监听事件

    我们先了解一下什么是事件,什么是监听?

    事件:就是游戏启动后,用户对游戏所做

               的操作(点击鼠标,按下按键等)

    监听:在游戏循环中,判断用户的具体操作


    我们主要通过pygame.event.get()来获得当前用户的所有动作列表

 # 捕获事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            print("游戏结束...")
            pygame.quit()
            exit()


六、精灵和精灵组

        之前,图像的加载,位置变化,绘制等都是由编写代码实现的,为了简化开发步骤,pygame专门提供了两个类:

(1)pygame.sprite.Sprite

     其主要用来存储图像数据

(2)pygame.sprite.Group


七、派生精灵子类

        1、新建plane_sprites.py文件

        2、定义GameSprite类,并且继承

              pygame.sprite.Sprite

提示:如果一个类的父类不是object,重写方法时,需super().__init__(),

要注意如果解释器是python2.7版本,则需要加上类名

class GameSprite(pygame.sprite.Sprite):

    def __init__(self, image_file, speed=1):

        super(GameSprite, self).__init__()

        self.image = pygame.image.load(image_file)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):

        self.rect.y += self.speed


八、使用精灵和精灵组创建敌机

        要求:使用派生的精灵子类创建精灵组,实现敌机动画效果

步骤:(1)from planes_sprites import *

           (2)创建精灵对象和精灵组对象

           (3)在游戏循环中精灵组对象调用

                update方法和draw方法

关键点:

    精灵:封装图形image,位置rect,以及运动速度speed,并且提供update方法,更新位置rect

    精灵组:可包含多个精灵对象,其调用update方法可以更新所有精灵位置rect,调用draw方法可在游戏屏幕game_screen绘制所有精灵图像

# 创建敌机精灵
enemy = GameSprite(".\image\enemy1.png")
enemy1 = GameSprite(".\image\enemy1.png"2)
# 创建敌机精灵组
enemy_group = pygame.sprite.Group(enemy, enemy1)


 # 对精灵调用update和draw方法
    enemy_group.update()
    enemy_group.draw(game_screen)


    本次演练的代码,已上传至百度云,复制下面链接在浏览器打开

          https://pan.baidu.com/s/1TVLQ3HYikja3QhcxzfcwIg


      更多python相关的实战小项目以及学习资源,可关注微信公众号:noobcoders ,定期分享python学习笔记以及实战小项目,并附带详细的代码。

                                                  



猜你喜欢

转载自blog.csdn.net/weixin_42546061/article/details/80968918
今日推荐