sprite可见游戏的简单基类 sprite简单理解就是图像对象,就是一个可以再屏幕上移动的小图片,并且这个小图片可以可其他小图片进行交互
1、思路
1)、创建精灵类
2)、创建多个精灵对象,将小球加入Group()里面
3)、实现精灵的移动
4)、精灵的碰撞
2、实现步骤
1)、创建精灵类ball,ball类继承pygame.sprite,Sprite,初始化的时候先初始化父类,然后在初始化ball它自己。
class ball(pygame.sprite.Sprite): def __init__(self,file_name,location,speed): #初始化父类 pygame.sprite.Sprite.__init__(self) self.img = pygame.image.load(file_name) self.rect = self.img.get_rect() self.rect.left,self.rect.top = location self.speed = speed
2)、创建多个精灵对象,将小球加入Group()里面
#创建多个精灵对象,将小球放到Group里面 sprits = pygame.sprite.Group() for i in range(0,3): for j in range(0,3): position = [i*100+80,j*100+80] speed = [random.randint(-2,4),random.randint(-5,6)] newball = ball("q1.png",position,speed) sprits.add(newball)
3)、实现小球的移动
小球的移动通过调用self.rect.move()函数,self.rect.move()有返回值,用self.rect接收。精灵碰到屏幕会反弹,实现小球的反弹。
#小球移动 def move(self): self.rect = self.rect.move(self.speed) #精灵反弹 #设置y 的值 if self.rect.top < 0 or self.rect.bottom > screen.get_height(): self.speed[1] = -self.speed[1] #设置x的值 if self.rect.left < 0 or self.rect.right > screen.get_width(): self.speed[0] = -self.speed[0]
4)、精灵的碰撞
精灵在移动后,有的彼此之间会碰撞,精灵在碰撞后,会发生反弹,往相反的方向移动。精灵的碰撞主要使用pygame.sprite.spritecollide(sprite.group,dokill,collided = None)函数。
#精灵之间的碰撞 #pygame.sprite.spritecollide(sprite.group,dokill,collided = None) #参数一:精灵对象,参数二:精灵组,包含所有精灵,参数三:是否删除组内所有碰撞的精灵,参数四:设置一个回调函数,用于制定特殊的检测方法,如果该参数忽略,那么默认是检测精灵之间的rect是否产生重叠 def sprite_collide(): screen.fill([12, 34, 220]) for newball in sprits: newball.move() for newball in sprits: #发生碰撞删除碰撞的小球 sprits.remove(newball) if pygame.sprite.spritecollide(newball,sprits,False): newball.speed[0] = -newball.speed[0] newball.speed[1] = -newball.speed[1] #碰撞后加入小球 sprits.add(newball) screen.blit(newball.img, newball.rect) pygame.time.delay(2)
5)、主程序
实现屏幕的显示、关闭和实现精灵的碰撞。
while True: for event in pygame.event.get(): #print(event) if event.type ==pygame.QUIT: pygame.quit() sys.exit() #移动后才会发生碰撞 sprite_collide() #显示pygame中的所有内容 pygame.display.flip()
3、实现结果