2013-10-10 67 views
0

我有一個Paddle類與move方法,上面寫着一些鍵盤輸入: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或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是主要的東西。

UPDATE

  1. 我意識到,我的game.py文件,該文件是主文件(即運行一個),會自動創建.pyc文件文件全部導入模塊。但是在另一個遊戲(其中objects.py文件的BallPaddle類)中,沒有生成.pyc文件,並且在Paddle的更新方法中檢查的事件被正確處理。

  2. 我嘗試刪除所有.pyc文件文件,並添加sys.dont_write_bytecode = True,以防止它們被自動生成的,但也沒有幫助。雖然.pyc文件不再顯示該程序是stil行爲與以前一樣。

  3. 想法:是不是我用一個pygame或內置的同名模塊遮蔽模塊?或者相反呢?到現在爲止我已經在項目文件夾以下模塊:

    constants.py

    frame.py

    game.py

    helper.py

    level.py

    menu.py

    music.py

    objects.py

    stats.py

    text.py

    vec2d.py

+0

你是什麼意思「直接從文件中運行?」 – kevintodisco

+0

只需運行.py文件。 – Jovito

+0

您是否在該.py文件中執行的代碼中調用了'pygame.init'? – kevintodisco

回答

0

事實證明,該解決方案是相當尷尬的。在主循環的遊戲,我計算這樣dt(自上次經過時間):

dt = clock.tick(FPS)/1000 

所以它被截斷爲0,因爲clock.tick返回的值是float因爲槳和球需要他們只是不動。我仍然不明白爲什麼dt = clock.tick(FPS)/1000在我的其他遊戲中運行良好。

+0

那麼它是如何在Eclipse和IDLE中工作的? – sloth

+0

@DominicKexel也不明白。 – Jovito