python - 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 比较陌生,所以任何帮助都将不胜感激!
解决方案
类名通常应使用 CapWords 约定。重命名player
为Player
,但保留player1
和player2
。
player
是一个类,但是update
是一个Method Objects。您必须调用类update
的实例对象player
。player1
并且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)
# [...]
推荐阅读
- django - Django API:带有过滤器的 URL 查询等于 null
- clamav - 如何为调试 amavis 添加消息头?
- javascript - v 形式的条件句
- autocomplete - 当光标位于 sublimetext 中的单引号或双引号内时如何隐藏选项菜单
- python - 从 google cloud dataproc python notebook 运行 .py 文件
- python - Postgres SQL 错误:没有与 ON CONFLICT 规范匹配的唯一或排除约束”尽管设置了约束
- python - 如何验证依赖下拉列表?
- javascript - 将数据从一个数组重新排列到另一个数组的不同方法
- tortoisesvn - 如何从命令提示符打开 Tortoise SVN 提交 UI
- python - 为什么从 CSV 文件导入数据时出现此 DBeaver 错误?