3

スプライトを均等に動かすことに問題があります。現在、whileループを使用してそれらを移動していますが、これの問題は、コンピューターが高速であるほど、ループが高速になり、スプライトが高速に移動することです。pygame でタイマー/クロック機能 (待機?) を試しましたが、待機中にカーソルがフリーズするため、カーソルがびくびくします。

マルチスレッドが解決策ですか?

これが私の問題のビデオです。 http://www.youtube.com/watch?v=cFawkUJhf30

4

2 に答える 2

9

フレームレートに依存しており、フレームレートが速いほど動きが速くなります。

通常、2 フレーム/ループ反復間の時間を計算しており、これを「デルタ時間」と呼んでいます。次に、そのデルタ時間を移動ベクトルに掛けます。

ループのサンプルは次のとおりです。

clock = pygame.time.Clock()
while True:
    # limit the framerate and get the delta time
    dt = clock.tick(60)

    # convert the delta to seconds (for easier calculation)
    speed = 1 / float(dt)

    # do all your stuff, calculate your heroes vector movement
    # if heroes position is "px, py" and movement is "mx, my"
    # then multiply with speed
    px *= mx * speed
    py *= my * speed

次に、動きはフレームレートに従います。ループが速い場合、デルタは低くなり、フレームごとの動きは遅くなります => フレームレートが何であれ、結果は同じ速度になります。

これで、フレームレートに依存しなくなりました。

于 2012-02-14T12:31:50.837 に答える