Pygame分离用户输入至独立文件时出现位置参数错误
解决Pygame中User_input_responses类的位置参数错误
错误原因
你在主文件中实例化User_input_responses时传入了主游戏类实例(self),但目标类的__init__方法只定义了self这一个参数,没有接收额外的位置参数,导致触发TypeError。同时目标类内部错误地用自身实例创建Ship对象,不符合原游戏的依赖逻辑。
修复步骤
1. 修改User_input_responses的构造方法
更新目标类的__init__,添加参数接收主游戏实例,并通过该实例获取已创建的Ship对象,避免重复创建:
import pygame import sys from ship_test import Ship class User_input_responses: def __init__(self, game): # 接收主游戏实例,获取已创建的ship对象 self.game = game self.ship = game.ship def user_input_reactions(self): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: self.keydown(event) elif event.type == pygame.KEYUP: self.keyup(event) # 补充你之前提到的keydown和keyup方法 def keydown(self, event): # 这里写原有的按键按下逻辑,比如: if event.key == pygame.K_RIGHT: self.ship.moving_right = True # 其他按键逻辑... def keyup(self, event): # 这里写原有的按键抬起逻辑,比如: if event.key == pygame.K_RIGHT: self.ship.moving_right = False # 其他按键逻辑...
2. 确认主文件的调用逻辑保持不变
主文件中self.movement = User_input_responses(self)的写法是正确的,无需修改,现在User_input_responses的构造方法已经能正确接收主游戏实例。
关键说明
- 主游戏类已经创建了
Ship实例,User_input_responses只需通过主游戏实例引用该对象即可,无需重新创建,这样能保持游戏状态的一致性。 - 确保目标类文件中导入了
pygame、sys以及Ship类,否则会触发导入错误。
内容的提问来源于stack exchange,提问作者Wade
相关产品推荐
相关产品推荐

