Python 通过同时按下两个键暂停使用pygame的游戏-tamagotchi项目
我试图在我的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
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是收集按键的一种更糟糕的方法,因为它允许你垃圾邮件按键,如果将“打开”和“关闭”映射到相同的键,则可能会以极快的速度打开和关闭“暂停”菜单。事件方法工作得更好。但是你不能设置一个计时器吗?是的,但是当你可以使用更简单的内置解决方案时,为什么还要这样做呢。