pygame使用定时器 每隔一秒生成一棵树

在这里插入图片描述

首先是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()  # 更新全部显示
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值