Python (pygame) 使用精灵和 类 制作图像的克隆

Python (pygame) using the sprites and classes to make clones of images

import pygame
import time
import random #Loads pygame and clock and random function

pygame.init() #Intiates pygame

display_width = 1440
display_height = 900

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
clock = pygame.time.Clock() #Starts auto clock updater
AstImg = pygame.image.load('Images\Ast.gif') #Asteroid image

def asteroid(x,y): #Function for asteroid display
     gameDisplay.blit(AstImg,(x,y))

def game():
     background_image = pygame.image.load("Images/Space.jpg").convert() 
     e = 1
     x = 2500
     y = 2500
     ax = 2500
     ay = 2500
     bx = 2500
     by = 2500
     cx = 2500
     cy = 2500
     dx = 2500
     dy = 2500

    while e == 1:
        gameDisplay.blit(background_image, [0, 0]) 

        asteroid(x,y)
        asteroid(ax,ay)
        asteroid(bx,by)
        asteroid(cx,cy)
        asteroid(dx,dy)
        if x == 2500:
           x = display_width
           y = random.randrange(60,display_height - 60)
       x += -2.5
       if ax == 2500:
          ax = display_width
          ay = random.randrange(60,display_height - 60)
       ax += -2.5
       if bx == 2500:
          bx = display_width
          by = random.randrange(60,display_height - 60)
       bx += -2.5
       if cx == 2500:
          cx = display_width
          cy = random.randrange(60,display_height - 60)
       cx += -2.5
       if dx == 2500:
          dx = display_width
           dy = random.randrange(60,display_height - 60)
       dx += -2.5

       pygame.display.update()
       clock.tick(120) #FPS
game()

我正在尝试使用 sprites 使这个 pygame 代码更高效 有人可以告诉我如何做到这一点,这样我就可以产生更多的小行星 我最终将同时需要相当多的小行星,但这不会奏效好的谢谢

您似乎想要使用 classes 来使您的代码更紧凑。本质上,class 是可用于定义对象(例如小行星)的变量和函数的集合。这是一个非常简单的小行星示例 class:

class Asteroid(pygame.sprite.Sprite):

    def __init__(self,x,y,image):
        pygame.sprite.Sprite.__init__(self)
        self.image = image
        self.rect.x = x
        self.rect.y = y

    def update(self):
        # insert movement code here

现在,可以创建小行星的多个实例 class。这将像这样完成:

ast1 = Asteroid(given_x,given_y,AstImg)
ast2 = Asteroid(given_x,given_y,AstImg)
ast3 = Asteroid(given_x,given_y,AstImg)
ast4 = Asteroid(given_x,given_y,AstImg)
ast5 = Asteroid(given_x,given_y,AstImg)

更好的方法是创建一个 for 循环,它可以创建任意数量的小行星,甚至随机化起始 x 和 y 值:

spriteList = pygame.sprite.Group()
for i in range(12):
    ast = Asteroid(random.randrange(1,1440),random.randrange(1,900),AstImg)
    ast.add(spriteList) # then in your while loop write spriteList.draw(gameDisplay)
                        # and spriteList.update()

我建议进一步研究 Pygame sprite classes 及其工作原理。 Here 是一个 link 可能会有所帮助。