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 可能会有所帮助。
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 可能会有所帮助。