如何在Python/Pygame中复制对象?

如何在Python/Pygame中复制对象?,python,pygame,Python,Pygame,所以我在玩Pygame平台。现在我有一个玩家角色,一个保险杠和背景。玩家可以在关卡或保险杠的地板上跑来跑去,当角色撞到边缘时,屏幕可以显示 但我希望有一种方法可以拥有多个保险杠,而不必单独创建每个保险杠。下面是一些相关代码 这是在游戏主循环之前创建缓冲 bumper = pygame.image.load("bumper.png") #load bumper pic bumperbounds = bumper.get_clip() #create boundaries for bumper bu

所以我在玩Pygame平台。现在我有一个玩家角色,一个保险杠和背景。玩家可以在关卡或保险杠的地板上跑来跑去,当角色撞到边缘时,屏幕可以显示

但我希望有一种方法可以拥有多个保险杠,而不必单独创建每个保险杠。下面是一些相关代码

这是在游戏主循环之前创建缓冲

bumper = pygame.image.load("bumper.png") #load bumper pic
bumperbounds = bumper.get_clip() #create boundaries for bumper
bumperbounds = bumperbounds.move (200, 250) #move the bumper to starting location
这是使保险杠阻止玩家跌落的代码。它只是将着陆值设置为1

    if playerbounds.left <= bumperbounds.right and playerbounds.right >= bumperbounds.left and playerbounds.bottom <= bumperbounds.top + 30 and playerbounds.bottom >= bumperbounds.top and gravity >=0: #if player lands on top of the bumper
        landed = 1 #set player to landed

任何帮助都是有用的

您需要为正在创建的对象创建一个类

例如:

class Leaf:
    def __init__(self):
        self.leafimage = pygame.image.load('fallingleaf.jpg').convert()
        self.leafrect = self.leafimage.get_rect()
        xpos = random.randint(0, 640)
        self.leafrect.midtop = (xpos, 0)
    def move(self):
        self.leafrect = self.leafrect.move([0, 1])
要同时创建对象

leaves = []
for i in range(5):
    leaves.append(Leaf())
随着xpos值的变化:

class Leaf:
    def __init__(self,xpos):
        self.leafimage = pygame.image.load('fallingleaf.jpg').convert()
        self.leafrect = self.leafimage.get_rect()
        self.leafrect.midtop = (xpos, 0)
    def move(self):
        self.leafrect = self.leafrect.move([0, 1])
    To create objects at the same time,

leaves = []
xpos= [20 30 40 50 60]
for i in range(5):
    leaves.append(Leaf(xpos[i]))

您需要为正在创建的对象创建一个类

例如:

class Leaf:
    def __init__(self):
        self.leafimage = pygame.image.load('fallingleaf.jpg').convert()
        self.leafrect = self.leafimage.get_rect()
        xpos = random.randint(0, 640)
        self.leafrect.midtop = (xpos, 0)
    def move(self):
        self.leafrect = self.leafrect.move([0, 1])
要同时创建对象

leaves = []
for i in range(5):
    leaves.append(Leaf())
随着xpos值的变化:

class Leaf:
    def __init__(self,xpos):
        self.leafimage = pygame.image.load('fallingleaf.jpg').convert()
        self.leafrect = self.leafimage.get_rect()
        self.leafrect.midtop = (xpos, 0)
    def move(self):
        self.leafrect = self.leafrect.move([0, 1])
    To create objects at the same time,

leaves = []
xpos= [20 30 40 50 60]
for i in range(5):
    leaves.append(Leaf(xpos[i]))

你应该考虑制作一个保险杠课程,看看课程图图rialhttps://docs.python.org/2/tutorial/classes.htmlAlternatively,您可以只使用创建保险杠的“factory函数”。但是,一个类是组织事物的好主意。而且,无论你采取哪种方式,你都需要存储保险杠对象列表,或者保险杠边界列表和保险杠列表,而不仅仅是一个。你应该研究制作保险杠类,参见课程图图rialhttps://docs.python.org/2/tutorial/classes.htmlAlternatively,您可以使用一个“工厂函数”来创建保险杠。但是一个类对于组织事情来说是一个很好的主意。而且,无论你采取哪种方式,你都需要存储一个保险杠对象列表,或者一个保险杠边界列表和一个保险杠列表,而不仅仅是一个。@firestreak:如果你的游戏是在真空中,树叶和保险杠将以相同的速率掉落。:)好的,我们要创建一个对象。假设我们想以与保险杠相似的方式使用leaf对象?我是否可以将起始位置传递到leaves数组中,而不是随机传递?当玩家撞到树叶时,树叶会有反应吗?@firestreak你肯定可以通过起始位置,而不是随机位置。您可以在构造函数中传递位置的值。@firestreak:如果您的游戏在真空中,树叶和保险杠将以相同的速率掉落。:)好的,我们要创建一个对象。假设我们想以与保险杠相似的方式使用leaf对象?我是否可以将起始位置传递到leaves数组中,而不是随机传递?当玩家撞到树叶时,树叶会有反应吗?@firestreak你肯定可以通过起始位置,而不是随机位置。您可以在构造函数中传递位置的值。