You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:56:31