Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过同时按下两个键暂停使用pygame的游戏-tamagotchi项目_Python_Python 2.7_Events_Pygame_Keyboard Events - Fatal编程技术网

Python 通过同时按下两个键暂停使用pygame的游戏-tamagotchi项目

Python 通过同时按下两个键暂停使用pygame的游戏-tamagotchi项目,python,python-2.7,events,pygame,keyboard-events,Python,Python 2.7,Events,Pygame,Keyboard Events,我试图在我的tamagotchi克隆中实现暂停功能(我正在为明年的受控评估进行练习),但我无法让左键和上键同时作为暂停按钮工作。如果可能的话,我希望尽可能地保持原版游戏的真实性,所以我宁愿不使用屏幕上的按钮。谢谢 import pygame import time WHITE = (255, 255, 255) BLACK = (0, 0, 0) size =(200, 200) screen = pygame.display.set_mode

我试图在我的tamagotchi克隆中实现暂停功能(我正在为明年的受控评估进行练习),但我无法让左键和上键同时作为暂停按钮工作。如果可能的话,我希望尽可能地保持原版游戏的真实性,所以我宁愿不使用屏幕上的按钮。谢谢

    import pygame
    import time

    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)

    size =(200, 200)
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption('Tama v4.5')
    screen.fill(WHITE)
    pygame.init()

    clock = pygame.time.Clock()

    sprites = ['AdultSpriteAAA.png']

    up_pressed = False
    left_pressed = False
    right_pressed = False

    def main():
        controls()
        if up_pressed == True and left_pressed == True:
            time.sleep(2)
            pause()
        player_position = pygame.mouse.get_pos()
        x = player_position[0]
        y = player_position[1]
        screen.blit(background, [0,0])
        screen.blit(sprite, [x, y])

        pygame.display.flip()
        clock.tick(60)

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

            elif event.type == pygame.MOUSEBUTTONDOWN:
                print(animate())
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    global up_pressed
                    right_pressed = True
                if event.key == pygame.K_LEFT:
                    global left_pressed
                    left_pressed = True
                if event.key == pygame.K_RIGHT:
                    global right_pressed
                    right_pressed = True

            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    global up_pressed
                    right_pressed = False
                if event.key == pygame.K_LEFT:
                    global left_pressed
                    left_pressed = False
                if event.key == pygame.K_RIGHT:
                    global right_pressed
                    right_pressed = False

    def info():
        return 0

    def food():
        return 1

    def toilet():
        return 2

    def game():
        return 3

    def connect():
        return 4

    def talk():
        return 5

    def medic():
        return 6

    def post():
        return 7

    def history():
        return 8

    def animate():
        return 9

    def pause():
        time.sleep(2)
        while True:
            controls()
            if up_pressed == True and left_pressed == True:
                time.sleep(2)
                break


    sprite = pygame.image.load(sprites[0]).convert()
    background = pygame.image.load('Background 200x200.png').convert()

    sprite.set_colorkey(BLACK)

    while True:
        main()

按下左iey键和向上键时使其暂停的方法如下:

import pygame
from pygame.locals import *
#game code
…
def pause():
    keyspressed = pygame.keys.get_pressed()
    if keyspressed[K_LEFT] and keyspressed[K_UP]:
        #pause code
        …

这段代码应该是正确的,但是如果您发现任何奇怪的事情,请尝试研究pygame密钥模块。请注意,K_LEFT和K_UP来自pygame.locals,它是从pygame单独导入的

当同时按下左iey和UP键时,使其暂停的方法如下:

import pygame
from pygame.locals import *
#game code
…
def pause():
    keyspressed = pygame.keys.get_pressed()
    if keyspressed[K_LEFT] and keyspressed[K_UP]:
        #pause code
        …

这段代码应该是正确的,但是如果您发现任何奇怪的事情,请尝试研究pygame密钥模块。请注意,K_LEFT和K_UP来自pygame.locals,它是从pygame单独导入的

我发现在pygame中编写游戏时有一个非常有用的方法:

if event.type == pygame.KEYDOWN 
    if event.key == (pygame.K_RIGHT and pygame.K_LEFT):
        while True: # Infinite loop that will be broken when the user press the space bar again
            event = pygame.event.wait()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:  # decid how to unpause?
                break #Exit infinite loop

我最近才发现的一个有趣的小问题是pygame.key.get_pressed()返回一个1和0的元组,表示键盘上的所有键,这些键可以用作布尔值或索引以获取键的有效“值”。在

上有一些很棒的tut,我发现在PyGame中编写游戏时,有一种方法非常有用:

if event.type == pygame.KEYDOWN 
    if event.key == (pygame.K_RIGHT and pygame.K_LEFT):
        while True: # Infinite loop that will be broken when the user press the space bar again
            event = pygame.event.wait()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:  # decid how to unpause?
                break #Exit infinite loop

我最近才发现的一个有趣的小问题是pygame.key.get_pressed()返回一个1和0的元组,表示键盘上的所有键,这些键可以用作布尔值或索引以获取键的有效“值”。在

keyspressed上的一些很棒的tut是收集按键的一种更糟糕的方法,因为它允许你垃圾邮件按键,如果你映射了打开和关闭相同的按键,这可能会非常快地打开和关闭暂停菜单。事件方法的效果要好得多。但是你不能也设置一个计时器吗?是的,但是当你可以使用更简单的内置解决方案时,为什么还要这样做呢。keyspressed是收集按键的一种更糟糕的方法,因为它允许你垃圾邮件按键,如果将“打开”和“关闭”映射到相同的键,则可能会以极快的速度打开和关闭“暂停”菜单。事件方法工作得更好。但是你不能设置一个计时器吗?是的,但是当你可以使用更简单的内置解决方案时,为什么还要这样做呢。