精灵移动问题与关键优先事项

2024-04-26 00:58:21 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我对屏幕上的精灵移动有个问题。我有一种方法,我希望事情发生如下:

  • 当我按下左移动键的同时,按住右键,我希望精灵向右移动,直到我把手指从右键上移开,然后它会继续向左,直到我的手指也从左移动键上移开。在
  • 我还需要这个方法来设置上/下键
  • 此外,当我按下向上或向下键,然后按左/右键之一时,我希望看到精灵向左或向右移动,直到其中一个也没有按下为止。在

总而言之,我希望最近一次按下的方向键优先于移动,而当它未按下时,我希望下一次按下的方向键优先于移动。我也不希望对角线移动,但这不是目前为止的问题。在

这是我目前为止的代码

m=pygame.key.get_pressed()
if m[K_d]:
    movey=0
    movex=speed
elif m[K_a]:
    movey=0
    movex=-speed
elif m[K_w]:
    movex=0
    movey=-speed            
elif m[K_s]:
    movex=0
    movey=speed 

这是我想要的50%。问题是,代码本身会优先处理正在发生的事情,所以结果是当我只按“A”键时,我向左移动,同时按“D”键,我向右移动。如果我只按“D”键,我会向右移动,但当我同时按下“A”键时,我会一直向右移动,这时我想向左移动。我尝试过if/not/和嵌套不同的方法,但到目前为止都失败了。在

我怎么解决这个问题?在

编辑:这是我在巴洛米耶的帮助下想出的。在

^{pr2}$

这是我想要的,我现在要做的就是最小化它,使它作为一个函数变得更优雅,但是我现在把这个想法记下来了。再次帮助我更好地理解了bartielomj的代码。真的很感激。在


Tags: 方法代码if屏幕事情精灵手指speed
1条回答
网友
1楼 · 发布于 2024-04-26 00:58:21

我总是这样解决问题:(部分解决):

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
    if event.type == KEYDOWN:     
        if event.key == K_ESCAPE:
            pygame.quit()
            sys.exit()
        if event.key == pygame.K_LEFT:                
            x_speed=3    
        if event.key == pygame.K_RIGHT:
            player.moveright()
            x_speed=-3             
        if event.key == pygame.K_UP:                
            y_speed=3               
        if event.key == pygame.K_DOWN:                
            y_speed=-3

    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT and x_speed == 3:                
            x_speed=0                
        if event.key == pygame.K_RIGHT and x_speed == -3:
            x_speed=0                
        if event.key == pygame.K_UP and y_speed == 3:
            y_speed=0                
        if event.key == pygame.K_DOWN and y_speed == -3:
            y_speed=0

当上一个键未按下时,这不会停止移动。在

编辑:这不是不可能的,只是没有那么有用。例如,可以有两个列表来模拟堆栈。当列表为空时,你的角色不会移动。对于每个keydown,您将该键附加到列表的末尾。每次上键,你都会从列表中移除键。这样,最近按下的键将位于列表的末尾,如果取消按住,则最后一个最近的键也将位于列表的末尾。在

一个小例子:

^{pr2}$

在移动方法中,您可以尝试以下操作: 如果列表中的最后一个元素存在,请将其向正确的方向移动。在

if(not keylist[-1:]):
    character.move(direction=keylist[-1])
else:
    character.move(direction=0)

相关问题 更多 >