Python游戏:如何控制生成A的速度?

问题描述

在此游戏中,不同的字母会在一个时间间隔后从屏幕顶部掉落,当您敲击键盘上的相应键时,这些字母会消失。每个字母的x位置是随机的,下降速度将随着游戏的进行而加快。游戏将在特定条件下结束(例如,屏幕高度被字母占据)。对我来说,这似乎是巨大的挑战。因此,在第一阶段,我的代码被简化为相同的字母“ A”,而不是变化的字母。 问题是如何控制游戏中每个“ A”的生成速度。目前,它太快了。我已经尝试过time.sleep(5),但是它也阻止了每个字母的掉落。 这是代码

  1. alphabet_zoo.py
import sys
import pygame
from pygame.locals import *
from settings import Settings
from letter import Letter
import game_functions as gf
from pygame.sprite import Group

def run_game():
    pygame.init()
    az_settings =Settings()
    screen = pygame.display.set_mode((0,0),RESIZABLE)   
    pygame.display.set_caption("Alphabet Zoo")
    letters = pygame.sprite.Group()


    while True:
        gf.letter_generator(az_settings,screen,letters)
        gf.check_events(letters)
        letters.update()
        gf.update_screen(az_settings,letters)


run_game()

  1. settings.py
    def __init__(self):
        self.bg_color = (0,0)
        self.letter_speed_factor = 1
  1. game_functions.py
import sys
import pygame
import time
from letter import Letter

def letter_generator(az_settings,letters):
    # time.sleep(5)
    # This setting not only slowdowns the generating of A
    # but also stops the falling down of each A for a short time.
    new_letter = Letter(az_settings,screen)
    letters.add(new_letter)

def check_events(letters):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                letters.empty()


def update_screen(az_settings,letters):
    screen.fill(az_settings.bg_color)
    letters.draw(screen)
    letters.update()
    pygame.display.flip()
  1. letter.py
import pygame
import random
from pygame.sprite import Sprite


class Letter(Sprite):

    def __init__(self,az_settings,screen):
        super().__init__()
        self.screen = screen
        self.az_settings = az_settings
        self.image = pygame.image.load('images/A.png')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        self.rect.centerx = random.randint(0,self.screen_rect.right)
        self.rect.top = self.screen_rect.top
        self.center = float(self.rect.centerx)


    def update(self):
        if self.rect.bottom < self.screen_rect.bottom:
            self.rect.centery += self.az_settings.letter_speed_factor

我如何实现控制A生成速度的目标?

解决方法

您可以从时间模块中查看time.time()函数。示例:

import time

start = time.time()
sleepTime = 1
while True:
    print("This is being printed meaning the program isn't stopped")
    now = time.time()
    if now  - start > sleepTime:
        print("generate A in this area. This will only happen every one second.")
        start = now