Python Pygame不读取输入

Python Pygame不读取输入,python,pygame,Python,Pygame,我有一个拨片类,有一个移动方法,可以读取一些键盘输入: def move(self, dt): keys = pygame.key.get_pressed() if keys[K_LEFT]: return -self.speed * dt elif keys[K_RIGHT]: return self.speed * dt return 0 同一个类在另一个程序中使用,并且在那里工作良好。我完全不知道为什么会这样。真正奇怪的是,当程序从Eclipse或IDL

我有一个
拨片
类,有一个
移动
方法,可以读取一些键盘输入:

def move(self, dt):
    keys = pygame.key.get_pressed()
    if keys[K_LEFT]: return -self.speed * dt
    elif keys[K_RIGHT]: return  self.speed * dt
    return 0
同一个类在另一个程序中使用,并且在那里工作良好。我完全不知道为什么会这样。真正奇怪的是,当程序从Eclipse或IDLE运行时,会检测到按键,但当直接从文件运行时,什么都不会发生。另外,我最近添加了一些代码,使球在移动之前等待一段时间,在Eclipse中也是如此,但在直接从.py文件运行时不会

def update(self, dt):
    if self.on_paddle:
        self.rect.centerx = self.paddle.rect.centerx
        self.time_passed += dt
        if self.time_passed > 3:
            self.on_paddle = False
        else:
            self.rect = self.calcnewpos(dt)
            self.handle_collision()
为什么会这样?为什么它在从eclipse运行而不是从文件运行时工作?这是主要的东西

更新

  • 我意识到我的
    game.py
    文件是主文件(运行的文件),它会自动为所有导入的模块创建.pyc文件。但是在另一个游戏中(也有一个
    objects.py
    文件,其中包含
    Ball
    patle
    类),没有生成.pyc文件,并且在那里的patle更新方法中检查的事件得到了正确处理

  • 我尝试删除所有.pyc文件并添加sys.dont_write_bytecode=True,以防止它们自动生成,但这也没有帮助。虽然.pyc文件不再显示,但程序的运行方式仍然与以前相同

  • 想法:可能是我正在用pygame或同名内置模块跟踪一个模块吗?还是反过来?到目前为止,我在项目文件夹中有以下模块:

    constants.py

    frame.py

    game.py

    helper.py

    level.py

    menu.py

    music.py

    objects.py

    stats.py

    text.py

    vec2d.py


  • 事实证明,这个解决方案相当令人尴尬。在游戏的主循环中,我正在计算
    dt
    (自上次以来经过的时间)如下:

    dt = clock.tick(FPS) / 1000
    

    所以它被截断为0,因为clock.tick返回的值是一个浮点数,而且由于球拍和球需要
    dt
    ,所以它们不会移动。我仍然不明白为什么在我的另一个游戏中,
    dt=clock.tick(FPS)/1000运行得很好。

    你说的“直接从文件运行”是什么意思?只是运行.py文件。你在该.py文件中执行的代码中调用了
    pygame.init
    ,在外部作用域的主函数中。我将通过缩小范围来开始调试它。如果您改用
    pygame.event.get
    ,按键/释放事件是否通过这里?另外,其他程序中有哪些启动和初始化代码是您的程序中没有的?@DominicKexel也不明白这一点。