У меня есть персонаж (чья (x, y) позиция хранится в bodyc) и несколько платформ.Эти платформы представлены в переменной «plist» и хранятся в моде [[x, y], экземпляр pygame.Surface].Персонаж прыгает со скоростью.
Это мой текущий алгоритм:
def onplatform(self):
for i in plist:
if intersect(i[0]+list(i[1].get_size()), [bodyc[0], bodyc[1], 50, 50]):
return True, plist.index(i)
return False, len(plist)
onplat=self.onplatform()
if yvelocity!=-13:
bodyc[1]-=yvelocity
if yvelocity>-12: yvelocity-=1
if yvelocity==-13 and not onplat[0]: yvelocity=-1
if onplat[0] and -13<yvelocity<-1:
yvelocity=-13
bodyc[1]=plist[onplat[1]][0][1]-50 #(y-value of platform)-50
if pressed[pygame.K_UP] and yvelocity==-13:
yvelocity=13
Проблема с этим алгоритмом заключается в том, что когда персонаж касается платформы, даже если дно не находится наплатформа, код все равно поместит персонажа на платформу.
Я пытался сделать так, чтобы хитбокс был очень маленьким (1 или 3 пикселя в высоту), но персонаж совсем не касался платформы, потому что скорость заставляет персонажа перепрыгивать через платформу.Установка большего размера, например, 5 или 7 пикселей, имеет ту же проблему, что и описанная выше.
Есть ли простой способ исправить это?