0

我有一个Paddle类,它有一个move读取一些键盘输入的方法:

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 运行而不是从文件运行时有效?是主要的东西。

更新

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

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

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

    constants.py

    frame.py

    game.py

    helper.py

    level.py

    menu.py

    music.py

    objects.py

    stats.py

    text.py

    vec2d.py

4

1 回答 1

0

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

dt = clock.tick(FPS) / 1000

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

于 2013-10-11T13:43:00.250 回答