3

ゲームのキーストロークをキャプチャする方法を知っている人はいますか?が目標です。)私はこのコードを見つけました。これは良いアイデアのように見えますが、私の頭の中にあります。コメントを追加したり、この件に関する記事に私を送ったりすると、大きな助けになります。多くの人がこの疑問を持っていることを私は知っています。前もって感謝します?

    try:
        from msvcrt import kbhit
    except ImportError:
        import termios, fcntl, sys, os
        def kbhit():
            fd = sys.stdin.fileno()
            oldterm = termios.tcgetattr(fd)
            newattr = termios.tcgetattr(fd)
            newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
            termios.tcsetattr(fd, termios.TCSANOW, newattr)
            oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
            fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
            try:
                while True:
                    try:
                        c = sys.stdin.read(1)
                        return True
                    except IOError:
                        return False
            finally:
                termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
                fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
4

2 に答える 2

1

これを直接制御する方法を理解したい場合は、Linux(またはOS X)のマニュアルページ、、、およびをよく見ることから始めtermiosfcntlくださいstty。それはたくさんのものですが、それらすべてのフラグが何のためにあるかがわかります。

通常、キーボード入力はラインバッファリングされます。ターミナルドライバは、リターンキーを押すまで入力を収集します。フラグ~termios.ICANONはラインバッファリングをオフにする役割を果たしているため、ユーザーが入力した内容をすぐに確認できます。

一方、ユーザーがキーを押したときにのみプログラムが応答するようにしたい場合は、必要ありませんos.O_NONBLOCK。つまり、プログラムはキーボードからの読み取り時にブロックされませんが、読み取りでは空の文字列が返されます。 。これは、ユーザーが反応するかどうかに関係なく、物事が起こり続けるライブアクションゲームに適しています。

于 2012-03-27T11:00:08.543 に答える
1

Pygameは始めるのに適した場所です。ドキュメントは本当に優れています。キーボード出力を取得する方法は次のとおりです。

import pygame    
pygame.init()
screen = pygame.display.set_mode((100, 100))
while 1:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key <= 256:
            print event.key, chr(event.key)

これを行うには、pygame を初期化し、アクティブなウィンドウを作成する必要があります。これらの行に沿って何かをせずに「リターン」キーを押すのを避ける方法はないと思います。

Pygame で何かを作成することは、サイトにたくさんの例があるため、プログラミングの学習を開始するのに実際にはかなり良い方法です。

于 2012-03-27T06:09:48.413 に答える