sprite动画精灵,让小球动起来

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、实现结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值