如何在 python 中添加云?

How add clouds in python?

我想在我的游戏中添加云来使我的游戏更逼真,但我不知道,如何正确实现。怎么了?

from pygame.locals import *
import pygame
import os
import random

WIDTH = 1200
HEIGHT = 700
FPS = 60
usr_y = HEIGHT - 120
usr_x = WIDTH - 1120


BLUE = (0, 255, 255)
GREEN = (34, 89, 76)
NOTGREEN = (0, 128, 128)
WHITE = (255, 255, 255)

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Mini-games")
clock = pygame.time.Clock()
icon = pygame.image.load('icon.png')
pygame.display.set_icon(icon)
player_img = pygame.image.load('Sonic.actionp1.png').convert()
pygame.mixer.music.load('Фоновая музыка.mp3')
pygame.mixer.music.play(-1)
clouds_jpg = pygame.image.load('Clouds.jpg').convert()

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = player_img
        self.image.set_colorkey(NOTGREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = usr_x
        self.rect.centery = usr_y
        self.y = self.rect.y

    def update(self):
        self.rect.y = round(self.y)
        self.speedx = 0
        keystate = pygame.key.get_pressed()
        if keystate[pygame.K_LEFT]:
            self.speedx = -8
        if keystate[pygame.K_RIGHT]:
            self.speedx = 8
        self.rect.x += self.speedx
        if self.rect.right > WIDTH:
            self.rect.right = WIDTH
        if self.rect.left < 0:
            self.rect.left = 0


class Clouds(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = clouds_jpg
        self.image.set_colorkey(WHITE)
        self.rect = self.image.get_rect()
        self.rect.centerx = random.randint(0, WIDTH)
        self.rect.centery = random.randint(HEIGHT - 550, HEIGHT)


    def update(self):
        self.rect.x(-5, 0)
        

    ADDCLOUD = pygame.USEREVENT + 1
    pygame.time.set_timer(ADDCLOUD, 1000)


all_sprites = pygame.sprite.Group()
player = Player()
clouds = Clouds()
all_sprites.add(player, clouds)




jump = False
counter = -20
        

def make():
    global  usr_y, counter, jump
    if counter >=  -20:
        player.y -= counter 
        counter -= 1
    else:
        counter = 20
        jump = False


running = True
while running:
    clock.tick(FPS) 
    for event in pygame.event.get(): 
        
        if event.type == KEYDOWN:    
            if event.key == K_ESCAPE:
                running = False
            elif event.key == K_SPACE:
                jump = True
        elif event.type == pygame.QUIT:
                running = False

    if jump:
        make()


                                             
    all_sprites.update()
    screen.fill(BLUE)
    all_sprites.draw(screen)
    pygame.display.flip()
    clouds.update()


pygame.quit()

指令self.rect.x(-5, 0)没有任何意义。您可以使用 pygame.Rect.move_ip 指令分别移动一个 sorite 矩形:

self.rect.x(-5, 0)

self.rect.move_ip(-5, 0)

当云离开 Window 时,将云的位置更改为右侧:

class Clouds(pygame.sprite.Sprite):
    # [...]

    def update(self):
        self.rect.move_ip(-5, 0)
        if self.rect.right <= 0:
            self.rect.left = screen.get_width()