Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите реализовать столкновения в платформере pygame

Dikson Des Ученик (149), на голосовании 3 года назад
Здравствуйте, я делаю игру на платформе Pygame и столкнулся с проблемой, что никак не могу реализовать столкновения, т. е. мне нужно чтобы мой герой наступал сверху на коробки и оставался на них, а он в свою очередь этого не делает и просто проходит сквозь них, пожалуйста помогите найти ошибку.
Функция проверки столкновений:
def check_collisions(rect1x, rect1width, rect1y, rect1height, rect2x, rect2width, rect2y, rect2height):
for x in range(rect1x + rect1width, rect1x, -1):
if (rect2x <= x <= rect2x + rect2width):
xcollide = True
break
for y in range(rect1y, rect1y + rect1height):
if (rect2y <= y <= rect2y + rect2height):
ycollide = True
break
if (xcollide or ycollide):
return True
else:
return False
Использование функции в главном цикле:
sch = 0
for i in platformcord: #Перебираем координаты всех коробок и ищем столкновения
platformcords = platformcord[sch]
px = platformcords[0]
py = platformcords[1]

collision = check_collisions(0, x, width, y, height, px, PLATFORM_WIDTH, py, PLATFORM_HEIGHT)
if collision:
run = False
else:
sch += 1
Если нужна дополнительная информация пишите, отвечу
P.S. Игра спокойно запускается, никаких ошибок не вылазит
P.P.S. run = False в использовании функции я поставил чтобы проверить будет ли collision принимать значение True
Голосование за лучший ответ
аноним аноним Мыслитель (8110) 3 года назад
нужно применять гравитацию после проверки всех блоков (не после каждого)
еще лучше поменять True и False в collision (т. е выводить True, если столкновения нет и наоборот) и тогда просто умножать результаты:
...
gravity=1
for i in platforms: gravity*=1
if gravity: #код для падения вниз
...
Похожие вопросы