pygame定时器操作
✕
pygame有内置的定时器,我们可以设置在一定时间触发指定的事件。
代码就用上篇的精灵的反弹方块,让反弹方块一个一个的出现,超过指定的数量就删除最早的反弹方块。。。
吐槽,,明明是方块怎么写成球了。。
定时器的使用分为以下步骤:
2.添加定时器事件:
a.pygame.time.set_timer(ADD_JL, 3000)
3.捕获定时器事件:
a.
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
elif event.type == ADD_JL:
# 定时器添加精灵
jlz.add(Jl())
就是这么简单!
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()