0

私は pygame でゲームを作成していますが、次のコードで問題が発生しました:

while not self.end: # main game loop
        keys = pygame.key.get_pressed()
        if keys[K_LEFT]:
            adddirection(LEFT)
        elif keys[K_RIGHT]:
            adddirection(RIGHT)
        elif keys[K_UP]:
            adddirection(UP)
        elif keys[K_DOWN]:
            adddirection(DOWN)

上矢印または下矢印を押したまま、右または左のキーを押しても何も起こらず、elif が解決されません。なんで ?これを別の方法で行う必要がありますか?

すべての「elif」を「if」に置き換えると、逆のことが起こります。左右押しっぱなしだと上下が決まらない。

その奇妙なメカニズムを理解したいと思います。

4

3 に答える 3

0

そのため、elif スタックの性質上、1 つが true として解決された場合、他のものはテストせず、単純にスキップして、elif がどこかでオンラインで動作するかどうかをループします。

そのため、それぞれに「if」を使用するか、for ループに分割する必要があります。

ただし、それらすべてに対して if を使用すると言うので、期待される動作はまだ得られません。これは「adddirection()」が原因であると思われます。この問題を解決できない場合は、それも投稿していただけますか?

別の回答で述べられているように、キープレスを処理するために pygame イベントを使用することもできます

于 2014-08-02T18:18:49.637 に答える
0

コードは次のようになります

for event in pygame.event.get():
    if event.type==QUIT:
        pygame.quit()
        sys.exit()

    if event.type == KEYDOWN:
        if (event.key == K_LEFT):
            //
        elif (event.key == K_RIGHT):
            //
        elif (event.key == K_UP):
            //
        elif (event.key == K_DOWN):
            //

keys_pressed = key.get_pressed()

if keys_pressed[K_LEFT]:
 //

if keys_pressed[K_RIGHT]:


if keys_pressed[K_UP]:
//

if keys_pressed[K_DOWN]:


//

あなたの条件に置き換え//てください

于 2014-08-02T05:18:34.050 に答える