当我的 Hitbox 与它上面的东西发生碰撞时,我该如何启动它
how can I wok my hitbox when it collides with something on top of it
我正在制作一款完全混乱的游戏,我所做的其中一件事就是放置熔岩。但我的问题是碰撞检测。
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
而且我认为我的播放器碰撞箱没有任何问题,因为当你被僵尸击中时它会完美运行
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
与自身进行比较。尝试用 man.hitbox[0]
替换 Falling_Lava.x
。我不确定这是否是正确的解决方法,但我希望这会有所帮助。
编辑:
这是你写的代码。除了第 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()
我正在制作一款完全混乱的游戏,我所做的其中一件事就是放置熔岩。但我的问题是碰撞检测。
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
而且我认为我的播放器碰撞箱没有任何问题,因为当你被僵尸击中时它会完美运行
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
与自身进行比较。尝试用 man.hitbox[0]
替换 Falling_Lava.x
。我不确定这是否是正确的解决方法,但我希望这会有所帮助。
编辑:
这是你写的代码。除了第 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()