目录
  • 1. 游戏循环和游戏时钟
    • 1.1 游戏中的动画实现原理
  • 2. 游戏循环
    • 3. 游戏时钟

      1. 游戏循环和游戏时钟

      之前几篇文章中,飞机大战游戏中的英雄飞机已经被绘制到屏幕上了,怎么能够让飞机移动呢?

      1.1 游戏中的动画实现原理

      电影的原理类似,游戏中的动画效果,本质上是快速的在屏幕上绘制图像

      电影是将多张静止的电影胶片连接、快速的播放,产生连贯的视觉效果!

      一般在电影上每秒绘制60次,就能够达到非常连续高品质的动画效果(相当于要每秒钟调用60次update效果)

      每次绘制的结果被称为帧Frame(静止画面)

      2. 游戏循环

      游戏的两个组成部分:

      • 游戏的初始化:创建游戏窗口,绘制图像初始位置,设置游戏时钟
      • 游戏循环:设置刷新帧率,检测用户交互,更新所有图像位置,更新屏幕显示

      游戏循环的开始就意味着游戏的正式开始

      游戏循环的作用:

      • 保证游戏不会直接退出
      • 变化图像位置–动画效果
        • 每隔1/60秒移动一下所有图像位置
        • 调用pygame.display.update()更新屏幕显示
      • 检测用户交互–按键、鼠标等

      3. 游戏时钟

      pygame专门提供了一个类pygame.time.Clock可以非常方便的设置屏幕绘制速度–刷新帧率

      要使用时钟对象需要两步骤:

      在游戏初始化创建一个时钟对象

      在游戏循环中让时钟对象调用tick(帧率)方法

      tick方法会根据上次被调用的时间,自动设置游戏循环中的延时

      案例演示:本案例将在游戏循环外部创建时钟对象,在游戏循环内部创建tick方法,就可以来指定循环内部的代码执行的频率。

      具体代码演示如下所示:游戏循环内部的代码,每秒重复循环60次就可以,就在游戏初始化的时候,创建游戏时钟对象。

      然后,在游戏循环中,通过时钟对象调用tick的方法,就可以轻松的指定,游戏循环内部的代码每秒钟执行的次数。

      import pygame
      pygame.init()
      # 创建游戏的窗口 640*642
      screen = pygame.display.set_mode((640, 642))
      # 绘制背景图像
      bg = pygame.image.load("./飞机大战资料包/images/background1.jpg")
      screen.blit(bg, (0, 0))
      # 绘制英雄的飞机
      hero = pygame.image.load("./飞机大战资料包/images/me1.png")
      screen.blit(hero, (300, 500))
      # 可以在所有绘制工作完成之后,统一调用update方法
      pygame.display.update()
      # 创建时钟对象
      clock = pygame.time.Clock()
      # 游戏循环->意味着游戏的正式开始
      i = 0
      while True:
          # 希望无限循环内部的代码每秒钟重复循环60次
          # 可以指定循环体内部的代码执行的频率
          clock.tick(60)
          print(i)
          i = i + 1
          pass
      pygame.quit()

      以上就是Python pygame 动画游戏循环游戏时钟实现原理的详细内容,更多关于Python pygame 动画的资料请关注其它相关文章!

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。