前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之pygame学习定时器操作(11)

Python之pygame学习定时器操作(11)

作者头像
萌海无涯
发布2019-08-20 11:53:04
3.8K0
发布2019-08-20 11:53:04
举报
文章被收录于专栏:萌海无涯萌海无涯

pygame定时器操作

pygame有内置的定时器,我们可以设置在一定时间触发指定的事件。

代码就用上篇的精灵的反弹方块,让反弹方块一个一个的出现,超过指定的数量就删除最早的反弹方块。。。

吐槽,,明明是方块怎么写成球了。。

定时器的使用分为以下步骤:

  1. 创建pygame定时器常量:
    1. # 创建事件常量 # 如果创建第二个事件常量可以使用 pygame.USEREVENT + 1 来设置 ADD_JL = pygame.USEREVENT

2.添加定时器事件:

a.pygame.time.set_timer(ADD_JL, 3000)

3.捕获定时器事件:

a.

代码语言:javascript
复制
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)
            elif event.type == ADD_JL:
                # 定时器添加精灵
                jlz.add(Jl())

就是这么简单!

代码语言: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)
        self.fk = pygame.Rect(x,y,self.w, self.h)

    def update(self,screen, *args):
        """ 精灵更新"""
        # print("精灵更新")
        # print(self.cont)
        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

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

    # def remove(self, *groups):


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



def main():
    # 初始化pygame模块
    pygame.init()
    # 创建事件常量
    # 如果创建第二个事件常量可以使用 pygame.USEREVENT + 1 来设置
    ADD_JL = pygame.USEREVENT
    # 添加定时器事件
    pygame.time.set_timer(ADD_JL, 3000)
    # 初始化字体
    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(Jl())

    while True:

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


        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0)
            elif event.type == ADD_JL:
                # 定时器添加精灵
                jlz.add(Jl())
        # 精灵更新操作
        jlz.update(screen)

        if len(jlz) > 2:
            # 获取精灵组列表
            deljl = jlz.sprites()
            # 删除精灵组列表的第一个元素
            jlz.remove(deljl[0])

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


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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档