如何从pygam中的一个类创建具有自己属性的不同对象

2024-04-19 12:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个游戏,你派爪牙来为你战斗。我已经能够使它工作,但代码越来越长和重复。我相信有更好的办法

我有两个问题。首先,我没有在任何时候需要一个仆从就可以调用一个仆从类,而是被迫为每个仆从(仆从1类、仆从2类等)创建一个类,因为他们应该有自己的x、y坐标和优缺点,以及动画。如果我使用同一类调用新对象,它们似乎也会重置。用一个类就可以完成这个任务吗

import pygame


class Minion1:

def __init__(self, x, y):

    self.hp = 100
    self.spd = 50
    self.str = 50

    self.walking = False

    self.x = x
    self.y = y
    self.w = 32
    self.h = 48

    self.images = pygame.image.load('images/minion1.png').convert_alpha()

    alpha = self.images.get_at((0, 0))
    self.images.set_colorkey(alpha)

    self.numImages = 4
    self.current_image = 0

    self.animation_time = 0.1
    self.current_time = 0

def update(self, dt):

    self.current_time += dt

    if self.current_time >= self.animation_time:
        self.current_time = 0

        if self.current_image >= self.numImages - 1:
            self.current_image = 0

        else:
            self.current_image += 1

    self.x -= self.velocity

def render_right(self, gameDisplay):
    gameDisplay.blit(self.images, (self.x, self.y), (self.current_image * self.w, self.h * 2, self.w, self.h))

我的第二个问题是派遣仆从。我刚刚为每个仆从写了相同的代码。有没有办法只改变号码(从minion1改为minion2)并使用更少的代码

    send_minion(minion1.x, minion1.y, minion1.w, minion1.h, 'walk1')

    if minion1.walking:
        minion1.update(dt)
        minion1.render_right(gameDisplay)
        minion1.x += 1

    send_minion(minion2.x, minion2.y, minion2.w, minion2.h, 'walk2')

    if minion2.walking:
        minion2.update(dt)
        minion2.render_right(gameDisplay)
        minion2.x += 1

Tags: 代码imageselfalphaiftimedefdt