本篇内容主要讲解“什么是PyGame逐帧动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是PyGame逐帧动画”吧!
创新互联建站是一家集网站建设,卡若企业网站建设,卡若品牌网站建设,网站定制,卡若网站建设报价,网络营销,网络优化,卡若网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
什么是逐帧动画?
逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。
承接上一节的代码
我们基于上一节的代码来实现一个圆形来回运动的动画效果。上一节的代码如下
import pygame pygame.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 大小的surface mySurface.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 = True while 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 pygame pygame.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 大小的surface mySurface.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 = 0 mySurfaceY = 0 dx = 10 dy = 0 #################################################################### clock = pygame.time.Clock() # 创建clock对象 FPS = 30 # 定义帧率的上限,就是帧率的最大值 mainloop = True while 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逐帧动画”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
新闻标题:什么是PyGame逐帧动画
网页URL:http://lswzjz.com/article/pgighi.html