什么是PyGame逐帧动画
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,本篇内容主要讲解"什么是PyGame逐帧动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是PyGame逐帧动画"吧!什么是逐帧动画?逐帧动画,是一种
千家信息网最后更新 2025年02月22日什么是PyGame逐帧动画
本篇内容主要讲解"什么是PyGame逐帧动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是PyGame逐帧动画"吧!
什么是逐帧动画?
逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。
承接上一节的代码
我们基于上一节的代码来实现一个圆形来回运动的动画效果。上一节的代码如下
import pygamepygame.init()screen = pygame.display.set_mode((640, 480)) # 设置窗口的大小# 创建一个surface,名字叫background,大小和screen一样background = pygame.Surface(screen.get_size())# 用白色填充background;255,255,255是RGB的白色background.fill((255, 255, 255))mySurface = pygame.Surface((200, 200)) # 200 x 200 大小的surfacemySurface.set_colorkey((0, 0, 0))pygame.draw.circle(mySurface, (0, 0, 255), (100, 100), 100)background = background.convert()screen.blit(background, (0, 0))mySurface = mySurface.convert_alpha()screen.blit(mySurface, (200, 200))clock = pygame.time.Clock() # 创建clock对象FPS = 30 # 定义帧率的上限,就是帧率的最大值mainloop = Truewhile mainloop: clock.tick(FPS) # 设置最大帧率 for event in pygame.event.get(): # 这一部分就是事件处理 if event.type == pygame.QUIT: # 如果按下右上角的叉叉 mainloop = False # 退出主循环 elif event.type == pygame.KEYDOWN: # 如果按下了键盘 if event.key == pygame.K_ESCAPE: # 而且按下的还是ESC键 mainloop = False # 退出主循环 # 在这里做一些游戏相关的运算,这里暂时省略 text = "FPS: {0:.2f}".format(clock.get_fps()) pygame.display.set_caption(text) pygame.display.flip() # 刷新显示pygame.quit()
实现原理和代码
我们将要在主循环中不断修改surface的坐标,从而实现移动的效果。还记得blit一个surface时,有个参数就是坐标吗?
screen.blit(mySurface, (200, 200))
这里的(200, 200)就是坐标。
在第一次blit我们的mySurface时,我们将它的坐标设置为(0, 0),这样它会显示在左上角。
我们定义了mySurfaceX、mySurfaceY来保存当前mySurface的坐标;定义了dx、dy来表示每次循环中mySurfaceX、mySurfaceY的增量。
在主循环中,修改mySurfaceX、mySurfaceY,然后mySurface被blit到(mySurfaceX, mySurfaceY)。
import pygamepygame.init()screen = pygame.display.set_mode((640, 480)) # 设置窗口的大小# 创建一个surface,名字叫background,大小和screen一样background = pygame.Surface(screen.get_size())# 用白色填充background;255,255,255是RGB的白色background.fill((255, 255, 255))mySurface = pygame.Surface((200, 200)) # 200 x 200 大小的surfacemySurface.set_colorkey((0, 0, 0))pygame.draw.circle(mySurface, (0, 0, 255), (100, 100), 100)background = background.convert()screen.blit(background, (0, 0))mySurface = mySurface.convert_alpha()####################################################################screen.blit(mySurface, (0, 0))mySurfaceX = 0mySurfaceY = 0dx = 10dy = 0####################################################################clock = pygame.time.Clock() # 创建clock对象FPS = 30 # 定义帧率的上限,就是帧率的最大值mainloop = Truewhile mainloop: clock.tick(FPS) # 设置最大帧率 for event in pygame.event.get(): # 这一部分就是事件处理 if event.type == pygame.QUIT: # 如果按下右上角的叉叉 mainloop = False # 退出主循环 elif event.type == pygame.KEYDOWN: # 如果按下了键盘 if event.key == pygame.K_ESCAPE: # 而且按下的还是ESC键 mainloop = False # 退出主循环#################################################################### mySurfaceX += dx mySurfaceY += dy if mySurfaceX + mySurface.get_rect().width > screen.get_rect().width: dx *= -1 elif mySurfaceX < 0: dx *= -1 else: pass screen.blit(background, (0, 0)) # !!!!!!!!!!!!!!!!!!!!!!! screen.blit(mySurface, (round(mySurfaceX, 0), round(mySurfaceY, 0)))#################################################################### text = "FPS: {0:.2f}".format(clock.get_fps()) pygame.display.set_caption(text) pygame.display.flip() # 刷新显示pygame.quit()
运行这一段代码,你将看到一个往复运动的圆形。请特别注意下面这一行代码
screen.blit(background, (0, 0)) # !!!!!!!!!!!!!!!!!!!!!!!
如果你注释掉这一行代码,你将得到一个长条。这行代码的作用相当于"擦除",它覆盖掉了前面画的东西。
到此,相信大家对"什么是PyGame逐帧动画"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
动画
代码
循环
大小
就是
坐标
最大
白色
效果
上一
一行
上限
事件
内容
原理
名字
圆形
对象
最大值
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器上架安装图
服务器上的nfc管理
盐田区网络技术转移客户至上
行为识别数据库介绍
如何读取sql数据库的文件
boa服务器安全
植物大战僵尸2服务器打不开了
木马是怎样渗透到服务器的
联合国粮食及农业组织数据库官网
上网行为管理服务器搭建
数据库管理师难考吗
沭阳网络安全宣传周
直销软件开发找 直销大师
表格中如何删除数据库
网信办备案软件开发公司
电子硬件开发和软件开发
中国数字货币对网络安全有要求吗
2022西安软件开发工资
第五空间网络安全电影
互联网科技之门
两个数据库表数据比对
服务器搭建与安全维护技术
应用软件配置远程数据库
租用美国服务器安全吗
服务器禁用ie增强安全配置
lemon oa 数据库
海天会议录播服务器
软件开发 考核表
2017三级网络技术考试
东莞erp软件开发热线