好吧,我在屏幕上遇到了精灵移动的问题。我有某种方式我希望事情发生如下:
- 当我按下左移动键并按住它的同时按下右移动键,我希望精灵向右移动,直到我的手指离开右键,然后它会继续向左直到我也从左侧移开手指移动键。
- 我也希望这种方法用于向上/向下键
- 除此之外,当我按下向上或向下键之一,然后按下左/右键之一时,我希望看到精灵向左或向右移动,直到其中一个也未被按下。
总而言之,我希望最近的方向键按下优先移动,当它未按下时,我希望下一个最近按下的键优先移动。我也不想要对角线运动,但到目前为止这还不是问题。
到目前为止,这是我的代码
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/and 嵌套不同的方式,但到目前为止都失败了。
我该如何解决?
编辑:这是我在 Bartlomiej 的帮助下想出的。
if e.type==KEYDOWN:
if e.key==pygame.K_a:
keylist.append(1)
#keylist.reverse()
print keylist[-1:]
if e.key==pygame.K_d:
keylist.append(2)
#keylist.reverse()
print keylist[-1:]
if e.type==pygame.KEYUP:
if e.key==pygame.K_a:
keylist.remove(1)
print keylist
if e.key==pygame.K_d:
keylist.remove(2)
print keylist
if keylist[-1:]==[1]:
walk=[-spd, 0]
print 'WTF MOVE LEFT'
elif keylist[-1:]==[2]:
walk=[spd, 0]
print 'WTF MOVE RIGHT'
else:
print 'WTFFFFFF'
walk=[0, 0]
这可以按我的意愿工作,我现在需要做的就是将其最小化并使其作为一个函数更优雅,但我现在明白了。再次感谢 Bartlomiej 帮助我更好地理解 python 和编码。真的很感激。