86008


Python Pygameの同時入力がうまくいかないので質問です。

現時点では画面上を入力方向に幽霊が飛び回るといった簡単なプログラムなのですが、例えば右左上を同時に押した時、x方向は相殺されて動かず、y方向にのみ動いて欲しいのですが、どうも後述のコードではうまくいかず…右左下、上下右、上下左も同様です。

そもそも入力を受け取れていないのではと、入力上を検知する部分に `print()`
を入れてみたところ、案の定左右上では上の入力を受け取っていない様子でした。

そこで、以下の二点にお答えくださると幸いです。

  * `Pygame.event.get()` は3つ以上の入力を受け取らないのか
  * 代替案

**現状のソースコード:**

[code]

    import pygame
    #Initial Options
    pygame.init()
    clock = pygame.time.Clock()
    
    #Screen
    screen = pygame.display.set_mode((800,600))
    pygame.display.set_caption('Pygame Test')
    
    #Objects
    class Object():
        def __init__(self, image, scale, location, speed):
            self.image = pygame.image.load(image)
            self.image = pygame.transform.scale(self.image, scale)
            self.rect = self.image.get_rect()
            self.rect.center = location
            self.speed = speed
        def move(self, up, down, left, right):
            dx = dy = self.speed
            if up:
                self.rect.y -= dy
            if down:
                self.rect.y += dy
            if left:
                self.rect.x -= dx
            if right:
                self.rect.x += dx
    
            if self.rect.y < -32:
                self.rect.y = -32
            if self.rect.y > 504:
                self.rect.y = 504
            if self.rect.x < -32:
                self.rect.x = -32
            if self.rect.x > 704:
                self.rect.x = 704
        def draw(self):
            screen.blit(self.image, self.rect.center)
    
    ghost = Object('ghost.png', (64, 64), (0, 536), 5)
    
    #Movements
    move_up = False
    move_down = False
    move_left = False
    move_right = False
    
    #Loop
    running = True
    while running:
    
        screen.fill((0, 0, 0))
        screen.blit(ghost.image, ghost.rect.center)
        ghost.move(move_up, move_down, move_left, move_right)
        ghost.draw()
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    move_up = True
                    print('key up')
                if event.key == pygame.K_DOWN:
                    move_down = True
                if event.key == pygame.K_LEFT:
                    move_left = True
                if event.key == pygame.K_RIGHT:
                    move_right = True
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    move_up = False
                if event.key == pygame.K_DOWN:
                    move_down = False
                if event.key == pygame.K_LEFT:
                    move_left = False
                if event.key == pygame.K_RIGHT:
                    move_right = False
    
        clock.tick(60)
        pygame.display.update()
    
[/code]


CC BY-SA 4.0
2022-01-28T08:10:28.157
85984
2022-01-30T04:27:39.717
2022-01-30T04:27:39.717
3060
51078
question
python pygame
Pygame で同時入力が反映されない


> ・Pygame.event.get()は3つ以上の入力を受け取らないのか

イベントが発生していないようです。  
質問されたコードを実行してみました。

  * 左右キーのキーリピート状態(長押し)で上キーが利かない、下は利く
  * 上下キーのキーリピート状態で左キーは利かない、右は利く

pygame.key.get_pressed()で確かめてみましたが、利かないキーはキープレス状態になっていませんでした。

> ・代替案

おそらくないと思います。  
エディタ(Hidemal、SAKURA、vim)で同様の現象が発生しています。  
内蔵キーボード、外付け(USB)のキーボードでも同様です。  
キーボードデバイスドライバが無視しているか、物理的な信号が発生していない可能性があります。


CC BY-SA 4.0
2022-01-29T23:22:55.460
86008
2022-01-29T23:29:13.553
2022-01-29T23:29:13.553
35558
35558
85984
answer