首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让一个物体具有暂时不可战胜的特性?

如何让一个物体具有暂时不可战胜的特性?
EN

Stack Overflow用户
提问于 2013-06-15 09:46:52
回答 3查看 934关注 0票数 2

我正在用pygame做一个游戏,我需要我的飞船在与一颗小行星相撞后3秒内保持免疫。我尝试了我找到的所有函数,但都不起作用。

下面是我的代码中的冲突部分:

代码语言:javascript
运行
复制
if collision == True:
    ship_game = ship_destroyed
    lifes -= 1;

然后我有这个部分:

代码语言:javascript
运行
复制
if collision:
     pi = True
     collision = False 
     pygame.time.delay(1000)

这个名为pi的变量,我在碰撞的情况下使用,将船放在屏幕的中间:

代码语言:javascript
运行
复制
if pi == True:
     ship_game = ship
     pos_ship={'x': WScreen/2, 'y': HScreen/2}
     pi = False

我想这足以让你理解我的问题了。谢谢您:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-15 10:24:10

这可以通过在检测到冲突时设置为True的变量collision_immune来实现。同时,在变量collision_time中记录最后一次冲突的时间。你可以从pygame.time.get_ticks()上获取时间。然后,在主循环的适当部分(上面没有显示),您可以检查自上次冲突以来的时间是否超过3秒,并将collision_immune重置为False。这可能看起来像这样

代码语言:javascript
运行
复制
if collision == True:
    ship_game = ship_destroyed
    lifes -= 1;
    collision_immune = True
    collision_time = pygame.time.get_ticks()

然后在某个地方,也许在主循环的开头,你把

代码语言:javascript
运行
复制
if pygame.time.get_ticks() - collision_time > 3000:    # The time is in ms.
    collision_immune = False

现在,您可以在游戏逻辑中使用变量collision_immune来确定船是否对最近的碰撞具有免疫力。

电子游戏快乐!:)

票数 4
EN

Stack Overflow用户

发布于 2013-06-15 10:22:34

您需要跟踪上次发生冲突的时间(last_collision_time = time.time()),然后当发生冲突时,检查该值是否小于3秒前(if time.time() - last_collision_time < 3.:),并按您认为合适的方式进行处理。在这种情况下,很明显,没有碰撞就会毁掉船。

票数 2
EN

Stack Overflow用户

发布于 2013-06-15 10:42:07

OOP风格:

代码语言:javascript
运行
复制
class Ship:

   def immune(self):
      return self.last_collide_time > current_time() - 3000

   def collide(self):
      if self.immune(): return
      self.lifes -= 1
      self.last_collide_time = current_time()
      # ....
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17119464

复制
相关文章

相似问题

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