其实相当于用类封装数据和方法,组相当于用类将精灵再封装一次,这样修改组属性,整个组内的精灵均做相应的改变。
一条鱼不停在图中移动的例子。
用的图
源码:
import pygame
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) #核心1,导入surface对象
self.rect=self.image.get_rect() #核心2,得到surface坐标对象
self.rect.topleft=initial_position #核心3,给定初始图像位置
self.speed=speed #核心4,导入速度值
def move(self):
self.rect=self.rect.move(self.speed) #移动函数核心,用move函数得到新坐标
if self.rect.bottom<0:
self.rect.top=480
if self.rect.top>480:
self.rect.bottom=0
if self.rect.left>640:
self.rect.right=0
if self.rect.right<0:
self.rect.left=640
def moveleft(self):
self.rect.left=self.rect.left-10
if self.rect.right<0:
self.rect.left=640
def moveright(self):
self.rect.right=self.rect.right+10
if self.rect.left>640:
self.rect.right=0
screen=pygame.display.set_mode((640,480))
screen.fill([255,255,255])
fi="fish.jpg"
loc_grop=([0,0],[200,200],[350,350])
Cargroup=pygame.sprite.Group() #声明精灵组
for i in loc_grop:
Cargroup.add(Car(fi,i,[1,5])) #将精灵放入精灵组
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
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(40)
screen.fill([255,255,255])
for carlist in Cargroup.sprites():
carlist.move() #调用精灵运动方法
screen.blit(carlist.image,carlist.rect)#显示精灵组
pygame.display.update()