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を含むファイルもあります) では、 .pycファイルは生成されず、Paddle の update メソッドでチェックされたイベントは正しく処理されます。BallPaddle

  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

clock.tickによって返される値が float であり、パドルとボールが を必要とするためdt、それらは動かないため、0 に切り捨てられました。dt = clock.tick(FPS) / 1000ただし、他のゲームでうまく機能した理由はまだわかりません。

于 2013-10-11T13:43:00.250 に答える