我正在制作一个游戏,其中一艘船必须躲避即将到来的外星人。游戏的主类有一个功能,可以将一个新的外星人添加到组中。我想减慢这个功能,但是当我添加 sleep 命令时,整个循环变慢了。我需要外星人在给定的时间间隔出现。
import sys
import pygame
from time import sleep
from settings import Settings
from rocket import Rocket
from bullet import Bullet
from alien import Alien
import asyncio
class Cosmos:
"""Главный класс игры Cosmos"""
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
self.screen_rect = self.screen.get_rect()
pygame.display.set_caption('Cosmos')
self.fon_image = pygame.image.load('image/Fon.png')
self.fon = self.fon_image.get_rect()
self.settings = Settings()
self.rocket = Rocket(self.screen, self.settings)
self.bullets = pygame.sprite.Group()
self.aliens = pygame.sprite.Group()
self.alien = Alien(self.screen, self.settings)
def key_event(self):
"""Обрабатывает нажатие клавиш"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
sys.exit()
elif event.key == pygame.K_d:
self.rocket.move_RIGHT = True
elif event.key == pygame.K_a:
self.rocket.move_LEFT = True
elif event.key == pygame.K_w:
self.rocket.move_UP = True
elif event.key == pygame.K_s:
self.rocket.move_DOWN = True
elif event.key == pygame.K_SPACE:
new_bullet = Bullet(self.screen, self.settings, self.rocket)
self.bullets.add(new_bullet)
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d:
self.rocket.move_RIGHT = False
elif event.key == pygame.K_a:
self.rocket.move_LEFT = False
elif event.key == pygame.K_w:
self.rocket.move_UP = False
elif event.key == pygame.K_s:
self.rocket.move_DOWN = False
def spawn_alien(self):
"""Добавляет пришельца в группу"""
alien = Alien(self.screen, self.settings)
self.aliens.add(alien)
def bullet_sprite(self):
"""Рисует и обновляет спрайт снаряда"""
for bullet in self.bullets.sprites():
if bullet.rect.x < 5000 and bullet.rect.x > 0 and bullet.rect.y < 1500 and bullet.rect.y > 0:
bullet.draw_bullet()
bullet.update()
else:
self.bullets.remove(bullet)
def hui(self):
def run_game(self):
"""Обновляет события игры"""
while True:
self.screen.blit(self.fon_image, self.fon)
self.key_event()
self.rocket.update_rocket()
self.bullet_sprite()
self.rocket.draw_rocket()
self.spawn_alien()
self.aliens.draw(self.screen)
print(self.aliens)
pygame.display.flip()
game = Cosmos()
game.run_game()
import pygame
from pygame.sprite import Sprite
from random import randint
class Alien(Sprite):
"""Класс, представляющий одного пришельца"""
def __init__(self, screen, settings):
super().__init__()
self.screen = screen
self.settings = settings
self.image = pygame.image.load('image/pixil-frame-1.png')
self.rect = self.image.get_rect()
self.rect.x = randint(0, 1800)
self.rect.y = randint(0, 1000)
检查是否有足够的时间创建一个新的外星人:
这里有一个检查,根据经过的时间和每单位时间它们的生成速度,外星人的数量少于应有的数量。只有在这种情况下,我们才会创建一个新的。什么时候
ALIENS_PER_SECOND = 1每秒创建一个