0

Pong ゲームを作成していますが、何を試しても、CTRL + C を押すと停止する一時停止システムを実装できません。

私は試した:

elif event.key == K_SPACE:
    try:
        hello = pygame.time.delay(1000) 
    except KeyboardInterrupt:
        hello = pygame.time.delay(1)

と:

elif event.key == K_SPACE:
    try:
        pygame.time.get_ticks()
    except KeyboardInterrupt:
        pass

と:

elif event.key == K_SPACE:
    try:
        time.sleep(10)
    except KeyboardInterrupt:
        pass

CTRL + C が押されるまでゲームを一時停止するにはどうすればよいですか?

4

1 に答える 1

0

私は pygame の専門家ではありませんが、ターミナル ウィンドウ (pygame ウィンドウではなく) がフォーカスCTRL + Cされている場合にのみ生成されると思います。KeyboardInterruptpygame はフォーカスされている間すべてのキーストロークをキャプチャするため、おそらくpygame.key.get_mods()and pygame.KMOD_CTRLto capture CTRL+ 文字キーを使用する必要があります。

とにかく、2 つの while ループ (一方は他方の中にネストされています) とブール値は、一時停止機能を機能させるようです。これは、「p」および で一時停止および再開しCTRL + Cます。

import pygame

def main():
    pygame.init()
    WIDTH=100
    HEIGHT=100
    SCREEN = pygame.display.set_mode((WIDTH, HEIGHT))
    CLOCK = pygame.time.Clock()
    FPS = 10
    running = True
    # outer loop
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_p:
                    # resume
                    running = True
                if event.key == pygame.K_c:
                    if pygame.key.get_mods() & pygame.KMOD_CTRL:
                        # ctrl + z
                        running = True
        print "paused"
        CLOCK.tick(FPS)
        # game loop
        while running:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_p:
                        # pause
                        running = False
                    if event.key == pygame.K_c:
                        if pygame.key.get_mods() & pygame.KMOD_CTRL:
                            # ctrl + z
                            running = False
            # rest of game code
            print "running"
            CLOCK.tick(FPS)
main()
于 2016-04-01T01:01:44.647 に答える