pygame 精灵&精灵组

其实相当于用类封装数据和方法,组相当于用类将精灵再封装一次,这样修改组属性,整个组内的精灵均做相应的改变。

一条鱼不停在图中移动的例子。

用的图

源码:

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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值