Python pygame 动画游戏循环游戏时钟实现原理
作者:ZacheryZHANG 发布时间:2022-07-02 06:27:27
标签:Python,pygame,动画
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()
来源:https://juejin.cn/post/7130266390895788039
0
投稿
猜你喜欢
- <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> &nbs
- 这也是老早前整理的了,也贴出来吧:1. showModalDialog和showModelessDialog的异同
- 1.背景项目需求,要求获得github的repo的api,以便可以提取repo的数据进行分析。研究了一天,终于解决了这个问题,虽然效率还是比
- 需求需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,
- python设置环境变量有什么用?1、设置环境变量可以在cmd命令行中找到python命令;2、设置环境变量可以在安装exe的第三包的时候找
- 在工作和学习中如果同时传输多个文件,大的安装包,python提供了一种无线传输的方法,开启一个本地http服务器,同一局域网下可方便访问 经
- 一、爬虫的流程开始学习爬虫,我们必须了解爬虫的流程框架。在我看来爬虫的流程大概就是三步,即不论我们爬取的是什么数据,总是可以把爬虫的流程归纳
- 下面一段代码给大家分享php未登录自动跳转到登录页面,具体代码如下所示:<?php namespace Home\Controller
- 类:在HTML中当表现class属性的时候,人们可以用点(.)号来作为~=号的一个替代选择,所以div.value等同于div[class~
- 本文实例为大家分享了python发送邮件的具体代码,供大家参考,具体内容如下#!/usr/bin/env python # -*- codi
- python进行矩阵运算的方法:1、矩阵相乘>>>a1=mat([1,2]); >>>a2
- 很多时候,我们都需要获取windows消息提示框的文本内容,例如系统异常信息,软件错误提示等。。。但是如何获取提示信息呢?通常我们的印象中,
- 创建一个NNimport tensorflow as tfimport numpy as np#fake datax = np.linspa
- 使用del和drop方法删除DataFrame中的列,使用drop方法一次删除多列数据准备:import pandas as pd 
- python函数的闭包问题(内嵌函数)>>> def func1():... print ('fun
- 这篇文章主要介绍了微信小程序 云开发模糊查询实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:人民币和美元间汇率固定为:1美元 = 6.78人民币。程序可以接
- 说明:最近在B站看一些材料力学视频时候,感觉有一些分集狂魔的分集真的很恐怖,有的甚至上百集,因此决定写个小脚本每次分析下到底这个系列视频到底
- 两年前发表的《The visual design of Web 2.0》中提到“Rounded everything”,圆角因使人感觉舒适的
- 在 CodeBit.cn 的论坛中,有人问 Javascript 中如何截取小数位并实现四舍五入,这是一个很常用的 js 技术,帖子中也有网