如何解决更快版本的“ pygame.event.get”为什么会错过事件,为什么会延迟事件?
[…]并在循环中有 for事件
pygame.event.get()
[..]“
这就是问题。pygame.event.get()
获取所有消息并将其从队列中删除。如果pygame.event.get
()
在多个事件循环中调用if ,则只有一个循环接收事件,但绝不会所有循环都接收所有事件。结果,似乎错过了一些事件。
获取一次事件,并在多个循环中使用它们,或将列表或事件传递给处理它们的函数和方法:
def handle_events(events):
for event in events:
# [...]
while run:
event_list = pygame.event.get()
# [...]
# 1st event loop
for event in event_list:
# [...]
# [...]
# 2nd event loop
for event in event_list:
# [...]
# [...]
# function which handles events
handle_events(event_list)
解决方法
我正在pygame中制作一个Asteroidz克隆,有两个for event in
pygame.event.get()
循环,一个用于检查退出请求,另外游戏应该已经通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。下面是我的check_input
函数的相关代码,每个循环运行一次。
def check_input(self):
for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH,WHOLE PROCESS IS TOO SLOW
if (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE):
print ('boop')
self.shootThrottle = 0
if self.shootThrottle == 0:
self.shootThrottle += 1
bullets.add(Bullet(self.shape[0][0],self.shape[0][1],self.angle))
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
self.angle -= 7
self.rotate(-7)
elif key[pygame.K_RIGHT]:
self.angle += 7
self.rotate(7)
if self.angle > 360:
self.angle -= 360
elif self.angle < 0:
self.angle += 360
if key[pygame.K_UP]:
self.accelerate()
elif key[pygame.K_DOWN]:
self.decelerate()
我正在使用shootThrottle
这种方法来尝试阻止子弹射击,直到释放空格键为止。该系统可以运行,但是由于for event in
pygame.event.get()
速度太慢,因此无法正常运行。
任何帮助深表感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。