源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

pygame学习笔记(5):游戏精灵

  • 时间:2020-09-03 18:25 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:pygame学习笔记(5):游戏精灵
据说在任天堂FC时代,精灵的作用相当巨大,可是那时候只知道怎么玩超级玛丽、魂斗罗,却对精灵一点也不知。pygame.sprite.Sprite就是Pygame里面用来实现精灵的一个类,使用时,并不需要对它实例化,只需要继承他,然后按需写出自己的类就好了,因此非常简单实用。 [b]一、什么是精灵[/b] 精灵可以认为成是一个个小图片,一种可以在屏幕上移动的图形对象,并且可以与其他图形对象交互。精灵图像可以是使用pygame绘制函数绘制的图像,也可以是原来就有的图像文件。 [b]二、sprite中主要且常用的变量有以下几个[/b]:更多详细的见[url=http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite]http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite[/url] self.image这个负责显示什么。如self.image=pygame.Surface([x,y])说明该精灵是一个x,y大小的距形,self.image=pygame.image.load(filename)说明该精灵调用显示filename这个图片文件。
[url=http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite]http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite[/url] Group.sprites 精灵组 Group.copy 复制 Group.add 添加 Group.remove 移除 Group.has 判断精灵组成员 Group.update 更新 Group.draw 位块显示 Group.clear - 绘制背景 Group.empty 清空 同样还是上面的这个例子,这里用精灵组来实现。
[u]复制代码[/u] 代码如下:
import pygame,sys pygame.init() class Car(pygame.sprite.Sprite):     def __init__(self,filename,initial_position):         pygame.sprite.Sprite.__init__(self)         self.image=pygame.image.load(filename)         self.rect=self.image.get_rect()         self.rect.bottomright=initial_position screen=pygame.display.set_mode([640,480]) screen.fill([255,255,255]) fi='ok1.jpg' locationgroup=([150,200],[350,360],[250,280]) Cargroup=pygame.sprite.Group() for lo in locationgroup:     Cargroup.add(Car(fi,lo)) for carlist in Cargroup.sprites():     screen.blit(carlist.image,carlist.rect) pygame.display.update() while True:     for event in pygame.event.get():         if event.type==pygame.QUIT:             sys.exit()
两个例子都是在[150,200],[350,360],[250,280]三个位置显示三辆小车,不同之处第一个用的是list,第二个用的是精灵组。差别就在几句话上,一是Cargroup=pygame.sprite.Group()定义Cargroup为精灵组,二是Cargroup.add(Car(fi,lo))用add代替了append,三是for carlist in Cargroup.sprites()这句中逐个显示精灵,这里试了一下,直接用for carlist in Cargroup也是可以的。精灵组的代码是高度优化过了,常常比列表还快。插入和删除都是常见的操作,代码还可以避免内存在循环中反复消耗。 [b]四、动画[/b] 利用精灵组做动画会显得比较方便,这里我们首先让上面的三辆小车运动起来。 (1)三辆小车以不同的速度前行,利用random.choice随机生成[-10,-1]之间的值作为速度让小车从下向上运动,并且当到达顶部时,再从底部出现。代码如下:
[u]复制代码[/u] 代码如下:
import pygame,sys from random import * pygame.init() class Car(pygame.sprite.Sprite):     def __init__(self,filename,initial_position,speed):         pygame.sprite.Sprite.__init__(self)         self.image=pygame.image.load(filename)         self.rect=self.image.get_rect()         self.rect.topleft=initial_position         self.speed=speed     def move(self):         self.rect=self.rect.move(self.speed)         if self.rect.bottom < 0:   #当小车底部到达窗口顶部时,让小车从下面出来                 self.rect.top=480 screen=pygame.display.set_mode([640,480]) screen.fill([255,255,255]) fi='ok1.jpg' locationgroup=([150,200],[350,300],[250,200]) Cargroup=pygame.sprite.Group() for lo in locationgroup:     speed=[0,choice([-10,-1])]     Cargroup.add(Car(fi,lo,speed)) while True:     for event in pygame.event.get():         if event.type==pygame.QUIT:             sys.exit()     pygame.time.delay(20)     screen.fill([255,255,255])     for carlist in Cargroup.sprites():         carlist.move()         screen.blit(carlist.image,carlist.rect)     pygame.display.update()
(2)可以通过左右键控制三辆小车的左右移动,按左键向左移动,当到达最左边时,不再移动,按右键向右移动,当到达最右边时,不再移动。具体代码如下:
[u]复制代码[/u] 代码如下:
import pygame,sys from random import * pygame.init() class Car(pygame.sprite.Sprite):     def __init__(self,filename,initial_position,speed):         pygame.sprite.Sprite.__init__(self)         self.image=pygame.image.load(filename)         self.rect=self.image.get_rect()         self.rect.topleft=initial_position         self.speed=speed     def move(self):         self.rect=self.rect.move(self.speed)         if self.rect.bottom < 0:                    self.rect.top=480     def moveleft(self):         self.rect.left=self.rect.left-10         if self.rect.left<0:             self.rect.left=0     def moveright(self):         self.rect.right=self.rect.right+10         if self.rect.right>640:             self.rect.right=640 screen=pygame.display.set_mode([640,480]) screen.fill([255,255,255]) fi='ok1.jpg' locationgroup=([150,200],[350,300],[250,200]) Cargroup=pygame.sprite.Group() for lo in locationgroup:     speed=[0,choice([-10,-1])]     Cargroup.add(Car(fi,lo,speed)) while True:     for event in pygame.event.get():         if event.type==pygame.QUIT:             sys.exit()         elif event.type == pygame.KEYDOWN:             if event.key==pygame.K_LEFT:                 for carlist in Cargroup.sprites():                     carlist.moveleft()                     screen.blit(carlist.image,carlist.rect)             if event.key==pygame.K_RIGHT:                 for carlist in Cargroup.sprites():                     carlist.moveright()                     screen.blit(carlist.image,carlist.rect)     pygame.time.delay(20)     screen.fill([255,255,255])     for carlist in Cargroup.sprites():         carlist.move()         screen.blit(carlist.image,carlist.rect)     pygame.display.update()
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部