zoukankan      html  css  js  c++  java
  • Python——项目-小游戏2-动画绘制

    实现游戏循环还有事件的监听

    项目源码

    在上一讲中 你需要完成这样的这样的效果, 如果你还没有完成,请不要继续往下阅读!!切记切记切记。,重要的事情说三遍

    我们来看一下什么是游戏循环

    所谓的游戏循环很好的理解 就是 ,什么时候游戏会退出,注意啊,我们是反向的理解 游戏不退出,那么游戏就没有结束,没有结束,就说明游戏正在运行中,是运行的状态

    • 它保证游戏持续的运行 不会直接的退出
    • 对图像的绘制有很大的帮助
    • 不断的检查用户交互的事件...

    把我们的游戏循环写出来

    ++++
    # 游戏循环
    while True:
        print(i)
        i += 1
    ++++
    

    我们看一下目前的游戏模块

    005_游戏主模块-w600

    我们一步一步的来,现在我们去设置游戏的时钟

    所谓的游戏时钟 实际上指的就是刷新率

    • 在python中定义了一个专门的类 'pygame.time.Clock 可以非常方便的设置屏幕绘制速度 —— 刷新帧率'
    • 如何使用它?你只需要两步
      1. 游戏初始化 创建一个 时钟对象
      2. 游戏循环 中让时钟对象调用 tick(帧率) 方法
      3. 说明:tick 方法会根据 上次被调用的时间,自动设置 游戏循环 中的延时
        你可以这样的来搞它
    # 1. 创建游戏时钟对象-你不需要导入包,这个是python自带的,就像js里面的定时器
    clock = pygame.time.Clock()
    i = 0
    
    # 游戏循环
    while True:
    
        # 设置屏幕刷新帧率
        clock.tick(60)
    
        print(i)
        i += 1
    
    

    现在我们来实现第一个主战飞机的动画

    需求分析:我们需要让飞机动起来。实现的原理就是在每一次的绘制中。把图片的位置进行变化,这样就完成了我们的 动 的效果

    • 代码逻辑分析

      1. 游戏初始化 定义一个 pygame.Rect 的变量记录英雄的初始位置
      2. 游戏循环 中每次让 英雄y - 1 —— 向上移动
      3. y <= 0 将英雄移动到屏幕的底部
      4. 注意:每一次调用 update() 方法之前,需要把 所有的游戏图像都重新绘制一遍而且应该 最先 重新绘制 背景图像,如果你不听我的建议,后果自负
    • 具体的实现

    # 1. 定义英雄的初始位置
    ++++(在这之前我们已经定于了对象)
    # 设置我们的初始化的绘制位置
    hero_rect = pygame.Rect(150, 500, 102, 126)
    
    while True:
    
        # 可以指定循环体内部的代码执行的频率
        clock.tick(60)
    
        # 2.更新英雄位置
        hero_rect.y -= 1
    
        # 3. 如果移出屏幕,则将英雄的顶部移动到屏幕底部
        if hero_rect.y <= 0:
            hero_rect.y = 700
    
        # 4.绘制背景图片
        screen.blit(bg, (0, 0))
        # 5.绘制英雄图像
        screen.blit(hero, hero_rect)
    
        # 6.更新显示//有关于整个窗口的更新 你需要放在最后
        pygame.display.update()
    

    咦?我们的游戏是不是 卡死 了?

    你已经注意到了这一点,业务我们的循环好像是一个无限循环,它没有结束的条件,

    • 需求分析:我们需要在点击窗口上的x号的时候退出游戏
    • 代码分析:
      1. 这里需要我们用到事件(event);
      2. 游戏一旦启动我们就需要不断的去监听发生的交互事件
      3. 一旦判断到有 ‘退出’事件的时候就结束我们的游戏 卸载我们的包
      4. pygame 中通过 pygame.event.get() 可以获得 用户当前所做动作 的 **事件列表,我们在可以写一个函数获取到这些事件其中的一个 ‘退出’事件 ,根据它来退出游戏
      5. 注意以下的代码非常的固定,几乎每一个pygame游戏都有这样的一行代码,它们的实现原理都是一样的,别担心 这并不难
    • 代码的实现
    +++++(上面还有好多代码就忽略了,我们专注我们的核心业务需求)
    while True:
    
        # 设置屏幕刷新帧率
        clock.tick(60)
    
        # 1.事件监听
        for event in pygame.event.get():
    
            # 2.判断用户是否点击了关闭按钮
            if event.type == pygame.QUIT:
                print("退出游戏...")
                # 卸载所有的依赖包
                pygame.quit()
    
                # 直接退出系统
                exit()
    
  • 相关阅读:
    【scrapy windows环境下安装遇到的问题】
    关于python中try,except,else,finaly的使用说明:
    【转】简单介绍Python中的try和finally和with方法
    [python]请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:
    利用闭包返回一个计数器函数,每次调用它返回递增整数:
    把“数字的字符串”转换成“整数”时遇到的小麻烦
    图像识别sift+bow+svm
    自己重装系统原来如此简单
    OLTPBenchmark教程以及workload自动生成
    windows系统快速安装pytorch的详细教程
  • 原文地址:https://www.cnblogs.com/BM-laoli/p/12551437.html
Copyright © 2011-2022 走看看