gpt4 book ai didi

python - 在另一个类中使用一个类的方法?

转载 作者:行者123 更新时间:2023-11-30 22:25:08 25 4
gpt4 key购买 nike

我正在尝试为我的游戏创建两个 Sprite ,一个是Player1,另一个是Player2,因此它们将具有非常相似的属性。我正在尝试弄清楚如何将我的 Player1 类的所有方法与我的 Player2 类一起使用。

class Player2(pygame.sprite.Sprite):
def __init__(self):
Player1.__init__(self)
self.rect.x = 400
self.walkImages = ["p2 walk/Run (1).png", "p2 walk/Run (2).png", "p2 walk/Run (3).png", "p2 walk/Run (4).png", "p2 walk/Run (5).png", "p2 walk/Run (6).png", "p2 walk/Run (7).png",
"p2 walk/Run (8).png"]

self.idleImages = ["p2 idle/Idle (1).png", "p2 idle/Idle (2).png", "p2 idle/Idle (3).png", "p2 idle/Idle (4).png", "p2 idle/Idle (5).png", "p2 idle/Idle (6).png", "p2 idle/Idle (7).png",
"p2 idle/Idle (8).png", "p2 idle/Idle (9).png", "p2 idle/Idle (10).png"]

def update(Player1, blocksGroup):
pass

创建 Player2 类时,我继承自 Player1。然而,使用我的更新方法,理论上它与Player1相同。我将如何使用 Player1 的方法进行更新?

这是Player1的更新方法:

  def update(self, blocksGroup):
self.gravity()

if self.velx == 0:
self.walkFrame = 1
self.idleFrame += 1
if self.idleFrame == 42:
self.idleFrame = 0

if self.idleFrame % 3 == 0:
self.image = pygame.image.load(self.idleImages[self.idleFrame // 3])
if self.direction == "left":
self.image = pg.transform.flip(self.image, True, False)


#Block collision

self.rect.x += self.velx
block_hit_list = pygame.sprite.spritecollide(self, blocksGroup, False)
for block in block_hit_list:
if self.velx > 0:
self.rect.right = block.rect.left
elif self.velx < 0:
self.rect.left = block.rect.right

self.rect.y += self.vely
block_hit_list = pygame.sprite.spritecollide(self, blocksGroup, False)
for block in block_hit_list:
if self.vely > 0:
self.rect.bottom = block.rect.top
self.jumps = 2
elif self.vely < 0:
self.rect.top = block.rect.bottom

最佳答案

你还没有真正说过Player1是如何做到的和Player2类是不同的,但假设您有充分的理由,我建议创建一个名为 PlayerBase 的基类并将其用作其他两个类的基类。

这将非常清楚地表明它们共享行为,并且只需要在每个子类的方法中实现差异。

我之所以说“假设你有充分的理由”拥有两个类,是因为如果它们之间的唯一区别是它们包含的数据,例如,你不需要有两个类来做到这一点 -相反,只需定义 __init__() (单个)类的方法,因此它接受提供此数据的参数,然后在必要时通过 self 将其存储为类实例数据。默认情况下传递给所有常规方法的参数。

有一个标题为 Objects and classes 的部分在维基百科的文章中Object-oriented Programming (OOP)其中讨论了两者之间的区别,这可能会让您更深入地了解何时应该使用其中一种来做事。

关于python - 在另一个类中使用一个类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47623084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com