Pygame没有阅读输入

时间:2013-10-10 16:49:58

标签: python pygame

我有一个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运行而不是从文件运行? Here是主要内容。

更新

  1. 我意识到我的game.py文件是主文件(运行的文件),会自动为所有导入的模块创建 .pyc 文件。但是在另一个游戏中(也有objects.py个文件,其中包含BallPaddle类),不会生成 .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

1 个答案:

答案 0 :(得分:0)

事实证明,解决方案非常令人尴尬。在游戏的主循环中,我正在计算dt(自上次以来的时间),就像这样:

dt = clock.tick(FPS) / 1000

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