首页 > 解决方案 > Pygame:问题源于使用键盘输入的 update() 函数

问题描述

我正在尝试创建一个两人游戏,其中每个玩家都是一个类的对象。但是,当我运行我的代码时,命令提示符在第 43 行给了我一个错误,说 update() 缺少位置参数:“函数”

class player(pygame.sprite.Sprite):
    lives = 5

    def __init__(self, left, right, img):
        super(player, self).__init__()
        self.surface = pygame.image.load(img).convert_alpha()
        self.rect = self.surface.get_rect()
        self.left = left
        self.left = right

    def update(self, function):
        if function[self.left]:
            self.rect.move_ip(-5, 0)
        if function[self.right]:
            self.rect.move_ip(5, 0)


player1 = player(K_LEFT, K_RIGHT, "jet1.png")
player2 = player(K_a, K_d, "jet2.png")


open = True
while open:
    for event in pygame.event.get():
        if pygame.key.get_pressed()[K_ESCAPE]:
            open = False
        elif event.type == QUIT:
            open = False

    pressed = pygame.key.get_pressed()

    player.update(pressed)

    display.blit(player1.surface, (width/4, height/4))
    display.blit(player2.surface, (.75 * width, .75 * height))

此外,当我在更新函数中取消“函数”参数时,我收到另一个错误消息:'pygame.key.ScancodeWrapper' 对象没有属性'left'

我对 Python 和 Pygame 比较陌生,所以任何帮助都将不胜感激!

标签: pythonpygame

解决方案


类名通常应使用 CapWords 约定。重命名playerPlayer,但保留player1player2


player是一个类,但是update是一个Method Objects。您必须调用类update实例对象playerplayer1并且player2是类的实例player

player.update(pressed)

player1.update(pressed)
player2.update(pressed)

但是,既然player是 a pygame.sprite.Sprite,我建议使用 a pygame.sprite.Group

player1 = player(K_LEFT, K_RIGHT, "jet1.png")
player2 = player(K_a, K_d, "jet2.png")

all_sprites = pygame.sprite.Group([player1, player2])

open = True
while open:
    # [...]

    all_sprites.update(pressed)

    # [...]

推荐阅读