首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Get_Pressed的行为异常

Get_Pressed的行为异常
EN

Stack Overflow用户
提问于 2013-06-03 19:01:46
回答 1查看 47关注 0票数 1

我的程序中的键盘事件出了点问题。长话短说,我使用的是pygame.KEYDOWN事件,但后来几乎每个人都说get_pressed()是更合适的选择。我相应地更改了代码,但遇到了一些问题

首先:

如果我按住了两个键,但只释放了一个键,那么出于某种原因,pygame会认为我同时释放了两个键。这意味着实现对角线移动是一件痛苦的事情。

其次:

对角线移动可以工作,但仅在以下情况下才有效:

我在上下移动,按住左边或右边

如果我向左或向右举起或向下,它(由于某种原因)就不起作用了

下面是我一直使用的代码:

代码语言:javascript
运行
复制
while done == False:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        done = True
keys = pygame.key.get_pressed()
if (keys[K_KP6]):
    square.spd_x+=5
    if square.spd_x > 5: # Put these speed limits in a function
        square.spd_x = 5
elif (keys[K_KP4]):
    square.spd_x -=5
    if square.spd_x <-5:
        square.spd_x = -5
elif (keys[K_KP8]):
    square.spd_y -=5
    if square.spd_y <-5:
        square.spd_y = -5
elif (keys[K_KP2]):
    square.spd_y +=5
    if square.spd_y >5:
        square.spd_y = 5
else:
    square.spd_x = 0
    square.spd_y = 0

如果有人能说明这个问题,我将不胜感激,并非常感谢您试图回答

谢谢你:D

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 09:23:19

我不知道这是否可行,但值得一试。

代码语言:javascript
运行
复制
while done == False:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        done = True
keys = pygame.key.get_pressed()
if (keys[K_KP6]):
    square.spd_x=5
else:
    square.spd_x=0
if (keys[K_KP4]):
    square.spd_x-=5
if (keys[K_KP8]):
    square.spd_y=-5
else:
    square.spd_y=0
if (keys[K_KP2]):
    square.spd_y +=5

如果它起作用了,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16895215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档