pygame如何播放数字胶片

 

Pygame 如何播放数字胶片

author: 刘敏 liumin3000@gmail.com


数字胶片就是一幅连续动作的图片,然后一个动作一个动作的处理形成一幅动画效果 现导入一张连续动作的图片,再一个动作一个动作切割,然后装入一个容器里面,最后一个一个动作的显示出来

  • arr = [] 声明一个空列表
  • image.subsurface((i,0,250,271))函数原型 Surface.subsurface(Rect): return Surface
  • 将image中的数字胶片分割为高为271px宽250px,左上脚的坐标为(i,0),返回surfance
  • arr.append(surface) 将surface添加到arr中
  • 实例中的数字胶片为 271X1000px,有4个动作,每个动作为250X250px
  • pygame.display.update() 刷新屏幕
  • pygame.time.wait(200) 暂停200毫秒
   1 #!/usr/local/bin/python
   2 
   3 import pygame
   4 pygame.init()
   5 
   6 screen = pygame.display.set_mode((800,600),0,32)
   7 image = pygame.image.load('horse.jpg').convert()
   8 arr = []
   9 for i in range(0,1000,250):
  10         arr.append(image.subsurface((i,0,250,271)))
  11 
  12 while 1:
  13         for i in range(0,4):
  14                 screen.blit(arr[i],(200,200))
  15                 pygame.display.update()
  16                 pygame.time.wait(200)

同时播放多张数字胶片

我们还是和前面的实例一样先介绍新出来的函数和对象,再解说实例

1,def init(self)和self请参考python语法 2,pygame.sprite.Sprite.init(self)

  • 用sefl初始化pygame.sprite.Sprite

3,pygame.sprite.RenderUpdates() return RenderUpdates

4,surfilm1.draw(screen)

  • 将surfilm1在screen中显示

5,pygame.display.update(rectfilm1)

  • 只刷新rectfilm1区域

<script type=text/javascript> document.write(' 切换行号显示 '); </script>
   1 #!/usr/local/bin/python
   2 
   3 import pygame, sys
   4 from pygame.locals import *
   5 
   6 
   7 class film1(pygame.sprite.Sprite):
   8         def __init__(self):
   9                 pygame.sprite.Sprite.__init__(self)
  10                 self.imagearr = []
  11                 self.images = pygame.image.load('horse.jpg').convert()
  12                 for i in range(0,1000,250):
  13                         self.imagearr.append(self.images.subsurface((i,0,250,271)))
  14                 self.image = self.imagearr[0]
  15                 self.rect = self.imagearr[0].get_rect()
  16                 self.rect.topleft = [100,100]
  17                 self.counter = 0
  18                 self.rect.topleft = [50,50]
  19 
  20         def update(self):
  21                 self.image = self.imagearr[self.counter]
  22                 self.counter += 1
  23                 if self.counter >= 4:
  24                         self.counter = 0
  25 #动作图片只有4张,0-3所以counter不能大于等4
  26 class film2(pygame.sprite.Sprite):
  27         def __init__(self):
  28                 pygame.sprite.Sprite.__init__(self)
  29                 self.imagearr = []
  30                 self.images = pygame.image.load('swim2.jpg').convert()
  31                 for i in range(0,900,100):
  32                         self.imagearr.append(self.images.subsurface((i,0,100,100)))
  33                 self.image = self.imagearr[0]
  34                 self.rect = self.imagearr[0].get_rect()
  35                 self.rect.topleft = [100,100]pygame.sprite.surfilm1.draw(screen)Sprite.__init__(self)
  36                 self.counter = 0
  37                 self.rect.topleft = [400,350]
  38 
  39         def update(self):
  40                 self.image = self.imagearr[self.counter]
  41                 self.counter += 1
  42                 if self.counter >= 9:
  43                         self.counter = 0
  44                 #动作图片只有9张,0-8,所以counter不能大于等9
  45 
  46 def main():
  47         pygame.init()
  48         screen = pygame.display.set_mode((800,600),0,32)
  49         surfilm1 = pygame.sprite.RenderUpdates()
  50         surfilm1.add(film1())
  51         surfilm2 = pygame.sprite.RenderUpdates()
  52         surfilm2.add(film2())
  53         while 1:
  54                 surfilm1.update()
  55                 surfilm2.update()
  56 
  57                 rectfilm1 = surfilm1.draw(screen)
  58                 rectfilm2 = surfilm2.draw(screen)
  59 
  60                 pygame.display.update(rectfilm1)
  61                 pygame.display.update(rectfilm2)
  62 
  63                 pygame.time.wait(200)
  64 
  65 if __name__ == '__main__':main()

如何让数字胶片移动

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值