python – Pygame事件队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Pygame事件队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1633字,纯文字阅读大概需要3分钟。
内容图文
![python – Pygame事件队列](/upload/InfoBanner/zyjiaocheng/776/b15b78aa97904f13a1704166167c95d4.jpg)
我想知道是否有一种方法可以使用poll()或get()而无需从队列中删除事件.
在我的游戏中,我检查不同位置的输入(不仅在主循环中),有时我需要在不同的地方检查相同的事件,但是当我将其从队列中删除时检查它.我尝试使用peek(),但问题是我无法获得与事件完成相对应的密钥.
while 1:
event = pygame.event.poll()
if event.type == KEYDOWN:
return event.key
else:
pass
#works but removes event from the queue
这可以获得与事件相对应的键,但是使用peek()它不能:
pygame.event.peek(pygame.KEYDOWN).key
#dosent work
但是我不能使用第一种方法,因为从队列中删除了事件,因此我无法检查程序中其他位置的关键事件.
我不太了解队列是如何工作的,所以也许我只是错了,但我尝试了第一次在不同的位置,只有我第一次检查它工作的事件.
我的目标是检查游戏中不同类别的事件.
谢谢你的帮助
解决方法:
我认为更好的设计是在一个地方检查事件 – 即使是在mainloop代码之外的一个分解函数或方法中,并将所有相关事件数据保存在其他对象(作为属性)或变量中.
例如,您可以使用所有当前按下的键,当前鼠标位置和按钮状态来保持对Python集的引用,并将这些变量传递给函数和方法.
否则,如果你需要只检查按下的键和鼠标状态(和指针位置),你可以完全绕过事件(只保留对mainloop上的pygame.event.pump()的调用). pygame.key.get_pressed函数是我最喜欢的键盘读取方式 – 它返回一个序列,其位置与键码一样多,每个按下的键在此向量中将其对应位置设置为True. (密钥代码在pygame.locals中可用作常量,如K_ESC,K_a,K_LEFT等).
例如:
if pygame.key.get_pressed()[pygame.K_ESCAPE]:
pygame.quit()
鼠标模块(在http://www.pygame.org/docs/ref/mouse.html中有记录)允许您在不消耗事件的情况下获取鼠标状态.
最后,如果您真的想要获取事件,我看到的可能性是,如果没有使用事件,则将事件重新发布到队列,并调用pygame.event.post – 可以放置此调用,例如在else子句中在if / elif序列中,您检查事件队列中的某个状态.
内容总结
以上是互联网集市为您收集整理的python – Pygame事件队列全部内容,希望文章能够帮你解决python – Pygame事件队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。