首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法暂停我的if语句,而不暂停我的整个脚本在游戏中?

有没有办法暂停我的if语句,而不暂停我的整个脚本在游戏中?
EN

Stack Overflow用户
提问于 2022-11-23 01:04:43
回答 1查看 36关注 0票数 -1

很简单,我只想在游戏中制造一个伤害系统,我想要不可战胜的框架(也就是延迟),这样你就不会立即死亡。

作为参考,以下是if语句

代码语言:javascript
复制
if pygame.Rect.colliderect(player_rect, baddude_rect):
    print('hit')
    time.sleep(0.5)

如果你需要整个脚本,我会发布它,堆叠溢出是挑剔的。

我已经尝试过异步和线程处理。

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 03:47:44

一种方法是使用蜱()提供的毫秒计时器。这将返回自PyGame启动以来的毫秒数。做时间计算很方便。

因此,阅读评论,您希望玩家在一次打击后的一段时间内(0.5秒)是无懈可击的。让我们把它变成一个常数:

代码语言:javascript
复制
HIT_CLOCK = 500    # milliseconds player is safe for, after taking a hit

所以当玩家被击中时,我们需要等那么久才能记录下另一次击球。这是未来一段时间内玩家被击中的时间,但这很容易计算:

代码语言:javascript
复制
time_now = pygame.time.get_ticks()
player_hit_clock = time_now + HIT_CLOCK   # time in the future

当代码决定玩家是否应该被击中时,它可以比较“未来的时间”,以确保它现在已经过去了:

代码语言:javascript
复制
if pygame.Rect.colliderect(player_rect, baddude_rect):
    time_now = pygame.time.get_ticks()
    if time_now > player_hit_clock:
        print('hit')
        player_hit_clock = time_now + HIT_CLOCK   #<<-- reset clock

重要的是确保player_hit_clock在第一次使用之前被初始化,将其设置为0就足够了。所以,把所有这些放在一起:

代码语言:javascript
复制
HIT_CLOCK = 500    # milliseconds player is safe for, after taking a hit

# ...

player_hit_clock = 0    # controls player consecutive damage rate

# ...

if pygame.Rect.colliderect(player_rect, baddude_rect):
    time_now = pygame.time.get_ticks()
    if time_now > player_hit_clock:
        print('hit')
        player_hit_clock = time_now + HIT_CLOCK   # <<-- reset the hit-clock
    else:
        print('player hit cooldown')

使用毫秒时钟的好处是:

  • 所有代码都正常运行,等待计时器过期。
  • 使用时钟的成本只是时间的取取,只有一个整数比较。
    • (如果您将时钟用于其他事情,则每个循环只需要一次提取)

  • 它是实时的,所以即使你的程序丢了几个帧,定时也会被保留下来。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74540691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档