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
投稿
猜你喜欢
- “Lightbox”是一个别致且易用的图片显示效果,它可以使图片直接呈现在当前页面之上而不用转到新的窗口。lightbox效果网络上有很多j
- 1、 在sublime text的官网下载,是适合自己系统的版本。官网地址:https://www.sublimetext.com/32、安
- 本文将和大家分享一些从互联网上爬取语料的经验。0x1 工具准备工欲善其事必先利其器,爬取语料的根基便是基于python。我们基于python
- 我想从文件读数据的话,要比直接从数据库快一些吧(个人观点),昨天测试了读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒
- 今天介绍一种基于高斯滤波和邻域随机采样,生成一种毛玻璃的图像特效,简单来说,就是先对图像做高斯滤波模糊,然后对模糊后的图像,通过对邻域的随机
- 前言:终于来了一篇有质量的文章,我个人感觉非常不错,《jfinal与bootstrap之间的登录跳转实战》。具体内容包含有点击登录弹出模态框
- 一、概述在ubuntu环境下进行嵌入式开发,我们在进行不同的项目开发时,可能会遇到python环境不统一的情况。这时,我们可以通过updat
- python中ord函数Python ord()函数 (Python ord() function)ord() function is a
- 1 GitHub创建作为图床的仓库1.1 在GitHub中创建一个仓库注意仓库要是public的,不然上传的图片还是无法使用的。如果不知道怎
- 继承与threading.Thread实现有返回值的子类MyThread,废话不多说,大家直接看代码import threadingclas
- unsafe 包func Alignof(x ArbitraryType) uintptrfunc Offsetof(x Arbitrary
- 概述Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. 常量常量 (Constant) 是指程
- Display SQL Server Login Mode. Supported Plat
- 虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成。这样,就需要用python来调用c的代码了具体流程:c编写相关函数 ,编
- 背景最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。数据库一共14条记录。如果按照一页10条。那么第一页
- 第一步、在detect.py中177行左右,cv.imshow(str(p),im0)之前加上:cv2.putText(im0,f"
- 基本映射映射使用在根据不同URLs请求来产生相对应的返回内容.Bottle使用route() 修饰器来实现映射.from bottle im
- 如下所示:# _*_ coding:utf-8 _*_#------------------------------------------
- <style type="text/css"> <!-- body,td,th {
- 稀疏矩阵-sparsepfrom scipy import sparse稀疏矩阵的储存形式在科学与工程领域中求解线性模型时经常出现许多大型的