8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

'pygame.event.get()' 的更快版本。为什么会错过事件以及为什么事件会延迟?

Afz 1月前

15 0

我正在 pygame 中制作一个 Asteroidz 克隆,并且在 pygame.event.get() 循环中有两个事件,一个用于检查退出请求以及游戏是否应该通过按下空格键来开始,然后进一步......

我正在 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() 速度太慢,它无法正常工作。

非常感谢您的帮助!

帖子版权声明 1、本帖标题:'pygame.event.get()' 的更快版本。为什么会错过事件以及为什么事件会延迟?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Afz在本站《python-3.x》版块原创发布, 转载请注明出处!
最新回复 (0)
  • [...] 并有 两个 for 事件 pygame.event.get() 循环 [...]

    这就是问题所在。pygame.event.get () 获取所有消息并将其从队列中删除。请参阅文档:

    这将获取所有消息并将其从队列中删除。 [...]

    如果 pygame.event.get() 在多个事件循环中调用,则只有一个循环接收事件,但并非所有循环都会接收所有事件。因此,某些事件似乎被遗漏了。

    每帧获取一次事件并在多个循环中使用它们,或者将列表或事件传递给处理它们的函数和方法:

    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)
    
返回
作者最近主题: