我希望实现的功能是不管按w还是按s,光标的位置始终都能在两个点之前切换
开始键盘keys的获取方式是这样的:
elif event.type in (pygame.KEYDOWN, pygame.KEYUP):
self.keys = pygame.key.get_pressed()
然后处理keys分了好几种出错情况:
①下面的代码使用后,按一下键,有时是等于就按1下键,但也很多时候等于按2,3下键
if keys[pygame.K_w] or keys[pygame.K_s]:
if self.cursor_state == 'start':
self.cursor_state = 'load'
self.cursor_rect.y = 438
else:
self.cursor_state = 'start'
self.cursor_rect.y = 398
elif self.cursor_state == 'start' and keys[pygame.K_v]:
self.finished = True
②情况①下方的代码不变,但把上面获取键盘代码改成
elif event.type == pygame.KEYDOWN:
self.keys = pygame.key.get_pressed()
按一下键就会无限循环重复按键(就像是按着不放一样)。反之把KEYDOWN改成KEYUP,就会没反应(就像没按一样)
③获取按键的方式仍然改为初始的
elif event.type in (pygame.KEYDOWN, pygame.KEYUP):
self.keys = pygame.key.get_pressed()
下面代码改成
if keys[pygame.K_w]:
self.cursor_state = 'start'
self.cursor_rect.y = 398
elif keys[pygame.K_s]:
self.cursor_state = 'load'
self.cursor_rect.y = 438
elif keys[pygame.K_v]:
if self.cursor_state == 'start':
self.finished = True
这样按键一点问题都没有,点一下就是一下,不多不少。但是,没实现我的功能,我希望实现的功能是不管按w还是按s,光标的位置始终都能在两个点之前切换,而这样只能w上,s下
④为了实现功能,我在③的基础上,改了下面代码,如下:
if keys[pygame.K_w]:
if self.cursor_state == 'start':
self.cursor_state = 'load'
self.cursor_rect.y = 438
else:
self.cursor_state == 'start'
self.cursor_rect.y = 398
elif keys[pygame.K_s]:
if self.cursor_state == 'start':
self.cursor_state = 'load'
self.cursor_rect.y = 438
else:
self.cursor_state == 'start'
self.cursor_rect.y = 398
elif keys[pygame.K_v]:
if self.cursor_state == 'start':
self.finished = True
print(111111)
按理说,③都成功了,④应该也能成功才对。然而现实是,④没有反应,光标不移动,我试过单步调试,明明确定坐标已经改变了,也blit新的坐标了。然而画面没动静。
另外,更神奇的是,如果我一进去,在默认的'start'的状态下,按下v键,就会打印11111(即上面代码的最后几行)。除此之外,只要我按过w或s键,不管按几下,都不能再打印11111了
感觉就好像是,如果if keys[ ]:后面,只要多了一层if,就不能正常运行一样,不知道是什么原因
希望有高人能解答一下,有必要的话,我也可以加微信发源码。如果实再不行,我也只能放弃最初的功能