前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之pygame学习精灵及精灵组(10)

Python之pygame学习精灵及精灵组(10)

作者头像
萌海无涯
发布2019-08-20 11:50:08
3.9K1
发布2019-08-20 11:50:08
举报
文章被收录于专栏:萌海无涯萌海无涯
pygame学习精灵及精灵组

精灵也就是我们的类操作,定义一个类型的对象,而且pygame封装好了一些对应的操作,方便我们的调用。

pygame中pygame.sprite.Sprite封装了精灵的操作,我们可以直接继承这个类,来方便的构建我们的精灵!

精灵的使用分为以下步骤:

  1. 定义精灵类:
    1. class 类名(pygame.sprite.Sprite):
    2. 初始化继承类方法
      1. super().__init__() # 一定要调用!
    3. 设置精灵更新操作
    4. 可选设置精灵死亡操作
  2. 创建精灵
    1. jj = Jl()
  3. 创建精灵组
    1. jlz2 = pygame.sprite.Group(填入我们创建的精灵,可以多个)
  4. 在循环事件调用精灵组更新事件
    1. jlz.update(screen)
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
还有个继承的方法,
代码语言:javascript
复制
self.kill() # 杀死精灵!!
代码语言:javascript
复制

完成以上步骤,我们就可以使用精灵组了。

下面代码使用精灵来创建多个反弹球,并且设置精灵的死亡操作!

最后复习一下绘制字体,跟图片。

注意自己要准备个图片!!!

代码语言:javascript
复制
import random
import pygame


W = 600
H = 600


class Jl(pygame.sprite.Sprite):
    """ 精灵类"""
    def __init__(self):
        # 初始化继承类方法
        super().__init__()
        # 宽
        self.w = 50
        # 高
        self.h = 50
        # 速度
        self.xs = 1
        self.ys = 1

        # 反弹到一定次数死亡
        self.cont = random.randint(10,20)

        # 随机的位置
        x = random.randint(0,W-self.w)
        y = random.randint(0,H-self.h)
        print(x,y)
        self.fk = pygame.Rect(x,y,self.w, self.h)

    def update(self,screen, *args):
        """ 精灵更新"""
        # print("精灵更新")
        # print(self.cont)
        if self.cont == 0:
            self.kill() # 杀死精灵
        self.fk.x += self.xs
        self.fk.y += self.ys
        if self.fk.x > W  - self.w or self.fk.x < 0 :
            self.xs = -self.xs
            self.cont -= 1
        elif self.fk.y > H - self.h or self.fk.y < 0:
            self.ys = -self.ys
            self.cont -= 1


        # 绘制精灵
        pygame.draw.rect(screen, (255, 0, 0), [self.fk.x,self.fk.y,self.fk.w, self.fk.h])


    def __del__(self):
        """ 删除"""
        print("删除精灵")




def main():
    # 初始化pygame模块
    pygame.init()
    # 初始化字体
    pygame.font.init()
    zt = pygame.font.SysFont('幼圆',60)
    over = zt.render("游戏结束啦!",True,(255,0,0))
    # 设置窗口大小
    screen = pygame.display.set_mode((W,H))
    # 设置窗口标题
    pygame.display.set_caption('窗口标题')

    # 创建精灵组
    jlz = pygame.sprite.Group()
    jj = Jl()
    jlz2 = pygame.sprite.Group(jj)
    # 创建精灵
    jl = list()
    for i in range(5):
        jl.append(Jl())
        jlz.add(jl[i])



    while True:

        # 重绘屏幕
        screen.fill((0))


        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)

        if len(jlz) == 0 and len(jlz2) == 0:

            # 加载游戏结束图片
            img = pygame.image.load('0.jpg')
            screen.blit(img,[100,100])
            # 游戏结束文字
            screen.blit(over, [100, 100])
        else:
            # 调用精灵
            # 更新方法
            jlz.update(screen)
            jlz2.update(screen)
            # 绘制方法
            # jlz.draw(screen)
            # 点击关闭按钮

        # 刷新显示
        pygame.display.update()


if __name__ == '__main__':
    main()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌海无涯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最后复习一下绘制字体,跟图片。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档