一次按多个键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一次按多个键相关的知识,希望对你有一定的参考价值。
我正在尝试制作一个双人游戏,每个人移动一个物体,但如果一个人移动他们的物体,另一个人不能。这是我的代码。
running = True
while running:
if event.type == pygame.KEYDOWN:
if (event.key == 276):
bat2.rect.x -= 2
if (event.key == 275):
bat2.rect.x += 2
if (event.key == 97):
bat1.rect.x -= 1
if (event.key == 100):
bat1.rect.x += 1
每个球棒都是不同的对象。有办法吗?
答案
要在PyGame
获得多个密钥,你可以做到
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT():
running = False
# --- after events ---
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]: # 276
bat2.rect.x -= 2
if keys[pygame.K_RIGHT]: # 275
bat2.rect.x += 2
if keys[pygame.K_a]: # 97
bat1.rect.x -= 1
if keys[pygame.K_d]: # 100
bat1.rect.x += 1
你使用pygame.event.get():
获取事件,它将更新你可以用pygame.key.get_pressed()
得到的特殊列表中的valus然后你可以检查哪些键被按下 - 但是你必须在events
之后执行,而不是在pygame.KEYDOWN
内部,这只是在按钮改变状态时创建的从“未按下”到“按下”但不是按住它时。
使用KEYDOWN
你应该这样做
bat2_move_left = False
bat2_move_right = False
bat1_move_left = False
bat1_move_right = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT():
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT: # 276
bat2_move_left = True
if event.key == pygame.K_RIGHT: # 275
bat2_move_right = True
if event.key == pygame.K_a: # 97
bat1_move_left = True
if event.key == pygame.K_d: # 100
bat1_move_right = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT: # 276
bat2_move_left = False
if event.key == pygame.K_RIGHT: # 275
bat2_move_right = False
if event.key == pygame.K_a: # 97
bat1_move_left = False
if event.key == pygame.K_d: # 100
bat1_move_right = False
# --- after events ---
if bat2_move_left:
bat2.rect.x -= 2
if bat2_move_right:
bat2.rect.x += 2
if bat1_move_left:
bat1.rect.x -= 1
if bat1_move_right:
bat1.rect.x += 1
另一答案
您需要循环遍历每个循环的每个事件,而不仅仅是第一个循环。尝试将您的if event.type
语句移动到另一个循环中,如下所示:
while running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if (event.key == 276):
bat2.rect.x -= 2
if (event.key == 275):
bat2.rect.x += 2
另一答案
在libgdx中我通常使用:
for(int i=0; i<2; i++)
{
If(Gdx.input.isTouched(i))
//do something
}
“i <2”允许在屏幕上进行两次触摸:i = 0且i = 1。
以上是关于一次按多个键的主要内容,如果未能解决你的问题,请参考以下文章