网络编程
位置:首页>> 网络编程>> Python编程>> pygame实现键盘的连续监控

pygame实现键盘的连续监控

作者:money_wife  发布时间:2023-09-26 11:17:10 

标签:pygame,键盘,监控

pygame对键盘的连续监听,供大家参考,具体内容如下

大家请看下面这一段代码:


for event in pygame.event.get():
 if event.type == pygame.QUIT:
  exit()
 elif event.type == pygame.KEYDOWN:
  if event.key == pygame.K_RIGHT:
   print("右")
  if event.key == pygame.K_UP:
   print("上")
  if event.key == pygame.K_DOWN:
   print("下")
  if event.key == pygame.K_LEFT:
   print("左")

大家首次监控键盘事件一般都会写出这样的代码我们着重来看一下对键盘上下左右键的监控。我们运行代码块我们会发现这几行代码和我们的想法是不一样的,我们在开发游戏的时候,我们大部分时候希望是可以连续控制,这样可以大大减少我们的手部疲劳,对玩家们也会非常的友好,但是我们现在的代码块,是敲一下键盘响应一次事件。所以我们要对代码进行改进,改进的方法有以下两种,大家可以根据自己的理解进行选择。

方法一:设置中间变量


moving_r = False
moving_l = False
moving_u = False
moving_d = False
while True:
for event in pygame.event.get():
 if event.type == pygame.QUIT:
  exit()
 elif event.type == pygame.KEYDOWN:
  if event.key == pygame.K_RIGHT:
   moving_r = True
  if event.key == pygame.K_UP:
   moving_u = True
  if event.key == pygame.K_DOWN:
   moving_d = True
  if event.key == pygame.K_LEFT:
   moving_l = True
 elif event.type == pygame.KEYUP:
  if event.key == pygame.K_RIGHT:
   moving_r = False
  if event.key == pygame.K_UP:
   moving_u = False
  if event.key == pygame.K_DOWN:
   moving_d = False
  if event.key == pygame.K_LEFT:
   moving_l = False
if moving_r:
 print("右")
elif moving_u:
 print("上")
elif moving_d:
 print("下")
elif moving_l:
 print("左")

引入四个moving变量将四个变量的初值均设为Flase,用pygame的KEYDOWN和KEYUP方法来改变四个变量的值,以此来实现对键盘的连续监控,这种方法虽然很好理解,但是如果是小白对代码的重构不是很熟悉会显得非常缀余。

方法二:运用pygame中get_pressed()


# 键盘的连续监听
Key_pressed = pygame.key.get_pressed()
if Key_pressed[K_UP]:
 print("上")
if Key_pressed[K_DOWN]:
 print("下")
if Key_pressed[K_LEFT]:
 print("左")
if Key_pressed[K_RIGHT]:
 print("右")

这样也是能连续监听键盘事件,但是这里需要注意一下if半段语句后面是中括号并非是小括号,第二个要注意的地方便是键盘名称,如果直接输入K_UP等是会报错的,有两种解决办法一种是导入pygame的方法:


from pygame import *

这样就不会报错了,另一种是在K_UP 前面加上pygame如:


if Key_pressed[pygame.K_UP]:
 print("上")

这样也是可行的。

来源:https://blog.csdn.net/epic_wife/article/details/115446156

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com