#python #pygame #collision-detection
#python #pygame #обнаружение столкновений
Вопрос:
Я создаю игру, которая должна быть полным хаосом, и одна из вещей, которые я сделал, это поместил падающую лаву. но моя проблема связана с обнаружением столкновений.
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
Ответ №1:
Похоже, ваши проверки на столкновение немного перепутались. В x-value, если проверить, вы помещаете 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()
Комментарии:
1. когда вы сказали, что я должен заменить Falling_Lava.x на man.hitbox[0], мне нужно туда, где я должен
2. Я добавил еще несколько объяснений о том, куда это ведет. Надеюсь, это поможет!
3. спасибо за вашу помощь, когда вы объяснили это более подробно, это имело смысл. 🙂
4. подожди, я только что заметил. если вы пойдете влево от падающей лавы, вы все равно потеряете здоровье
5. Я думаю, что во второй половине проверки x if вы ставите
Falling_Lava.width < man.hitbox[0] man.hitbox[2]
. Может быть, попробуйте заменитьFalling_Lava.width
наFalling_Lava.x