аноним аноним
Мыслитель
(8110)
3 года назад
нужно применять гравитацию после проверки всех блоков (не после каждого)
еще лучше поменять True и False в collision (т. е выводить True, если столкновения нет и наоборот) и тогда просто умножать результаты:
...
gravity=1
for i in platforms: gravity*=1
if gravity: #код для падения вниз
...
Функция проверки столкновений:
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