首先是pygame中的定时器
下面是例子
Python之pygame学习定时器操作(11)
先在主循环外添加事件
ADD_JL = pygame.USEREVENT
# 添加定时器事件
pygame.time.set_timer(ADD_JL, 3000)
然后在主循环内部增加判断
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
elif event.type == ADD_JL:
# 定时器添加精灵
jlz.add(Jl())
我原来错误做法是直接写一个函数,内容是创建对象然后绘制在游戏内。但是实际上正确的做法是创建一个数组,数组里面放的是创建好的对象。在主循环内elif event.type == ADD_JL:判断中新建一个对象,并放进数组中。然后在主循环内遍历这个数组,调用类中绘制函数。
下面是完整代码
import random
import sys
import time
import pygame
from pygame import surface
from pygame._sprite import Group
class dcar:
def __init__(self):
self.x = self
self.y = self
self.screen = self
self.p = self
def zhuanhuan(self):
dx = 180
#dy = 200
self.y=self.y+6
self.x=self.x-5
dcar = pygame.image.load("tree.png")
car = pygame.transform.scale(dcar, (self.y*0.5, self.y*0.5))#远大近小
screen.blit(car, (self.x, self.y))
pygame.init() # 初始化pygame
size = width, height = 600, 600 # 设置窗口大小
screen = pygame.display.set_mode(size) # 显示窗口
color = (255, 255, 255)
fcclock = pygame.time.Clock()
ADD_JL = pygame.USEREVENT
# 添加定时器事件
pygame.time.set_timer(ADD_JL, 1000)
shuzu=[]
c=dcar()
c.x=random.randint(0, 99)
c.y=random.randint(40, 79)
shuzu.append(c)
while True: # 死循环确保窗口一直显示
# print(len(xsshuzu), '....')
# print(f, '创建数组', len(cjshuzu), len(xsshuzu), '显示数组')
screen.fill(color)
# hua1()
fcclock.tick(6) # 设置图像刷新率,如果刷新率太高,图像闪的太厉害
# print(len(xsshuzu))
for event in pygame.event.get(): # 遍历所有事件
if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出
sys.exit()
pygame.quit()
exit()
elif event.type == ADD_JL:
c1 = dcar()
c1.x = random.randint(20, 79)
c1.y = random.randint(30, 69)
#c1.y = c1.y + 40
# c.height = c.height + 40
shuzu.append(c1)
#c.zhuanhuan()
for e in range(len(shuzu)):
shuzu[e].zhuanhuan()
pygame.display.flip() # 更新全部显示