微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我的碰撞箱与它上面的东西相撞时,我怎么能唤醒它

如何解决当我的碰撞箱与它上面的东西相撞时,我怎么能唤醒它

我正在制作一个完全混乱的游戏,我所做的其中一件事就是放置坠落的熔岩。但我的问题是碰撞检测。

if Falling_Lava.y - Falling_Lava.width < man.hitBox[1] + man.hitBox[3] and Falling_Lava.y + Falling_Lava.width > man.hitBox[1]:
        if Falling_Lava.x + Falling_Lava.width > Falling_Lava.x and Falling_Lava.width < man.hitBox[0] + man.hitBox[2]:
            pygame.time.delay(10)
            points -= 5
            man.hit()


if Falling_Lava1.y - Falling_Lava1.width < man.hitBox[1] + man.hitBox[3] and Falling_Lava1.y + Falling_Lava1.width > man.hitBox[1]:
        if Falling_Lava1.x + Falling_Lava1.width > Falling_Lava1.x and Falling_Lava1.width < man.hitBox[0] + man.hitBox[2]:
            pygame.time.delay(10)
            points -= 5
            man.hit()

发生的事情是,当坠落的熔岩到达你的 y 坐标的顶部时,即使你的 x 坐标不等于坠落的熔岩的 x 坐标,它也会开始降低你的生命值

What I said explained

而且我认为我的播放器碰撞箱没有任何问题,因为当你被僵尸击中时它可以完美运行

def __init__(self,x,y,width,height):
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.velo = 8
    self.left = False
    self.right = False
    self.walkcount = 0
    self.Idlecount = 0
    self.guncount = 0
    self.gunisfired = False
    self.isIdle = False
    self.standing = True
    self.punchislaunched = False
    self.punchcount = 0
    self.hitBox = (self.x + 20,self.y,28,60)
    self.health = 10

有人可以解释一下吗

如果您需要完整代码,请访问我的GitHub

解决方法

看起来你的碰撞检查有点乱。在 x 值 if 检查中,您输入 Falling_Lava.x + Falling_Lava.width > Falling_Lava.x and Falling_Lava.width < man.hitbox[0] + man.hitbox[2],将 Falling_Lava 与其自身进行比较。尝试用 Falling_Lava.x 替换 man.hitbox[0]。我不确定这是否是正确的解决方法,但我希望这会有所帮助。

编辑:

这是你写的代码。除了第 2 行的第一次比较外,一切看起来都很好。

if Falling_Lava.y - Falling_Lava.width < man.hitbox[1] + man.hitbox[3] and Falling_Lava.y + Falling_Lava.width > man.hitbox[1]:
    if Falling_Lava.x + Falling_Lava.width > Falling_Lava.x and Falling_Lava.width < man.hitbox[0] + man.hitbox[2]:
        pygame.time.delay(10)
        points -= 5
        man.hit()

更正示例,将 Falling_Lava.x 更改为 man.hitbox[0](删除实际代码中的箭头,只是为了指出...):

if Falling_Lava.y - Falling_Lava.width < man.hitbox[1] + man.hitbox[3] and Falling_Lava.y + Falling_Lava.width > man.hitbox[1]:
    # Try replacing this line!
    if Falling_Lava.x + Falling_Lava.width > --> man.hitbox[0] <-- and Falling_Lava.width < man.hitbox[0] + man.hitbox[2]:
        pygame.time.delay(10)
        points -= 5
        man.hit()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。