什么是PyGame逐帧动画
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"什么是PyGame逐帧动画",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是PyGame逐帧动画"吧!什么是逐帧动画?逐帧动画,是一种
千家信息网最后更新 2025年01月19日什么是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安全错误
数据库的锁怎样保障安全
江苏地理实体数据库建设8大类
景林网络技术有限公司
服务器一直显示电脑信息
谷歌账号找不到服务器怎么办
三国志幻想大陆b站服务器列表
泰安联想服务器代理零售
数据库表中修改数据用什么语句
局域网内访问服务器拒绝连接
数据库名称符号大全
阜南职工网络安全知识
方舟服务器有开启时间吗
软件开发流程规划
上海生态网络技术零售价格
浦东新区互联网络技术服务案例
手机网络安全使用什么软件
马云的网络安全组长叫什么
加微信 服务器正忙
怎么用网吧服务器玩游戏
九歌作诗器服务器错误
网络技术工程师那好
禾字开发后能用软件开发吗
泉山区海航软件开发
投服务器赚钱
郑州网络技术操作
邮箱pop3服务器设置
监控视频管理服务器套什么定额
宝塔ssh连接数据库
办公网网络安全解决方案
教育部网络安全7
西安爱易网络技术