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/bin/python
2
3 import pygame
4 from pygame.locals import *
5
6 class Chich(pygame.sprite.Sprite):
7 def __init__(self):
8 pygame.sprite.Sprite.__init__(self)
9 self.arrchich = []
10 self.images = pygame.image.load("xiaoji.jpg").convert()
11 for i in range(0,196,49):
12 self.arrchich.append(self.images.subsurface(i,0,49,94))
13 self.image = self.arrchich[0]
14 self.rect = self.arrchich[0].get_rect()
15 self.rect.topleft = [0,200]
16 self.counter = 0
17 def update(self,pos):
18 self.image = self.arrchich[self.counter]
19 self.rect = self.image.get_rect()
20 self.counter += 1
21 self.rect.left = pos
22 if self.counter >= 4:
23 self.counter = 0
24 def main():
25 pygame.init()
26 screen = pygame.display.set_mode((800,600),0,32)
27 background = pygame.image.load("bg.jpg").convert()
28
29 mychich = pygame.sprite.RenderUpdates()
30 mychich.add(Chich())
31
32 pos = 0
33 while True:
34 screen.blit(background,(0,0))
35 pos += 5
36 mychich.update(pos)
37 chichrect = mychich.draw(screen)
38 pygame.display.update(chichrect)
39 pygame.display.update()
40 if pos >= 800:
41 pos = 0
42 pygame.time.wait(400)
43
44 if __name__ == '__main__':main()