首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的hitbox和上面的东西相撞时,我该怎么做?

当我的hitbox和上面的东西相撞时,我该怎么做?
EN

Stack Overflow用户
提问于 2021-01-06 15:16:33
回答 1查看 37关注 0票数 1

我正在制作一个游戏,它意味着完全的混乱,而我所做的事情之一就是把坠落的熔岩。但我的问题是碰撞检测。

代码语言:javascript
复制
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,它也开始降低你的健康。

我不认为我的播放器hitbox有什么问题,因为当你被僵尸击中时,它工作得很好。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 15:21:38

看来你的碰撞检查有点搞砸了。在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]。我不太确定这是否是正确的解决办法,但我希望这能有所帮助。

编辑:

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

代码语言:javascript
复制
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] (删除实际代码中的箭头,只需指出.):

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65598412

复制
相关文章

相似问题

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