python - pygame.key.get_pressed() 和 event.type 有什么区别?
问题描述
这两段代码输出相同的东西。它们之间有什么区别,什么时候我们应该更喜欢使用其中一个而不是另一个?
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_LEFT:
xc=-4
if event.key==pygame.K_RIGHT:
xc=+4
if event.key==pygame.K_UP:
yc=-4
if event.key==pygame.K_DOWN:
yc=+4
if event.type==pygame.KEYUP:
if event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT:
xc=0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
yc=0
pressed=pygame.key.get_pressed()
if pressed[pygame.K_LEFT]:
xc=-4
elif pressed[pygame.K_RIGHT]:
xc=+4
else:
xc=0
if pressed[pygame.K_UP]:
yc=-4
elif pressed[pygame.K_DOWN]:
yc=+4
else:
yc=0
解决方案
pygame.KEYDOWN
事件仅在第一次按下键时触发。您可以使用pygame.key.set_repeat()自定义此行为,以便在按下键时使其以固定速率触发,尽管您无法使用此方法使其与您的帧速率完全匹配。这通常应该用于文本输入,或者当第一次按下键时应该发生一次动作。
pressed
只要按下该键,使用就会为真,而不管 的设置如何set_repeat
。如果在按下键时每帧都应该发生某些事情,这通常使用。
推荐阅读
- javascript - 在javascript中将网格重新缩放到移动屏幕
- android - AAPT:错误:未绑定的前缀。在 XML 安卓中
- python - 如何将此形状划分为一个单元(例如 1x1),如网格?
- ios - 在任何地方都找不到我的 UIApplicationDelegate
- xcode - Can I sort the "see the active scheme" list in Xcode?
- python - Python:ModuleNotFoundError:没有模块名称'mysql'
- python - Python 按部分向前填充
- php - 从 PHP 到 React 的 GET 请求
- javascript - 如何从服务器向其他客户端发送请求并接收客户端的响应,然后在 node.js 中发送数据?
- visual-studio - 将 Web 应用连接到 Visual Studio Application Insights