利用Pygame制作简单动画的示例详解_第1页
利用Pygame制作简单动画的示例详解_第2页
利用Pygame制作简单动画的示例详解_第3页
利用Pygame制作简单动画的示例详解_第4页
利用Pygame制作简单动画的示例详解_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第利用Pygame制作简单动画的示例详解目录前言计时器绘制精灵加载精灵完整代码

前言

实现一个帧动画,使用的一个图,根据不同的时间显示不同的图。

使用的就是如下所示的一张图,宽度780*300,使用加载图片260*150来实现。

pygame.init()

screen=pygame.display.set_mode((400,300),0,32)

pygame.display.set_caption("动画")

whileTrue:

foreventinpygame.event.get():

ifevent.type==pygame.QUIT:

sys.exit()

key=pygame.key.get_pressed()

ifkey[pygame.K_ESCAPE]:

sys.exit()

screen.fill((154,205,255))

pygame.display.update()

首先实现最简单的图形

计时器

首先根据时间的不同,去改变当前的图像。

使用pygame.time.Clock()实现时间定时。get_ticks()获取一个不断增减的时间。

framerate=pygame.time.Clock()

frametate.tick(30)

ticks=pygame.time.get_ticks()

pygame.init()

screen=pygame.display.set_mode((400,300),0,32)

pygame.display.set_caption("动画")

framerate=pygame.time.Clock()

whileTrue:

framerate.tick(30)

ticks=pygame.time.get_ticks()

print(ticks)

foreventinpygame.event.get():

ifevent.type==pygame.QUIT:

sys.exit()

key=pygame.key.get_pressed()

ifkey[pygame.K_ESCAPE]:

sys.exit()

screen.fill((154,205,255))

pygame.display.update()

758

791

824

858

891

924

958

992

1025

1058

输出如上所示,30帧每秒,所以时间每次增加大约34-33之间,如上所示我们获取到了一个随时间改变的量。

绘制精灵

这里使用精灵绘制图,为了方便操作。

classMySprite(pygame.sprite.Sprite):

def__init__(self,target):

pygame.sprite.Sprite.__init__(self)

self.master_image=None#存储图片的

self.frame=0#初始图片位置

self.old_frame=-1#上一个图片位置

self.frame_width=1

self.frame_height=1#保存每一帧的图片大小

self.first_frame=0

self.last_frame=0#位置取值的区间

self.columns=1#帧数的最大值

self.last_time=0#保存之间的时间

defload(self,filename,width,height,columns):

self.master_image=pygame.image.load(filename).convert_alpha()#载入图片

self.frame_width=width#260

self.frame_height=height#150

self.rect=0,0,width,height

self.columns=columns#列宽的数量是3

#trytoauto-calculatetotalframes

rect=self.master_image.get_rect()#获取到对应的图片的大小780*300

self.last_frame=(rect.width//width)*(rect.height//height)-1#5

defupdate(self,current_time,rate=30):#current_time更新频率为30

#updateanimationframenumber

ifcurrent_timeself.last_time+rate:#如果当前事件大于最后的时间+当前的节奏

self.frame+=1#当前的帧数加一

ifself.frameself.last_frame:#当前最后一帧则从第一帧开始

self.frame=self.first_frame#从0开始

self.last_time=current_time#将最后帧值为30

#buildcurrentframeonlyifitchanged

ifself.frame!=self.old_frame:#当前帧数不等于老的一阵

frame_x=(self.frame%self.columns)*self.frame_width

frame_y=(self.frame//self.columns)*self.frame_height

rect=(frame_x,frame_y,self.frame_width,self.frame_height)#更新对应的位置

self.image=self.master_image.subsurface(rect)#循环箱已有的方向

self.old_frame=self.frame

加载精灵

pygame.sprite.Group()创建精灵组,之后使用对应的updatedraw绘制对应的精灵

#createthesprite

dragon=MySprite(screen)

dragon.load("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论