Ich habe ein Zeichen (dessen (x, y) Position in bodyc gespeichert ist), und eine Reihe von Plattformen. Diese Plattformen werden in einer Variablen "plist" dargestellt und in der Mode [[x, y], pygame.Surface-Instanz] gespeichert. Der Charakter springt mit der Geschwindigkeit.(Python) Platformer - Charakter überspringt/falsch platziert
Dies ist mein aktueller Algorithmus:
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
Das Problem mit diesem Algorithmus ist, dass, wenn der Charakter die Plattform zu berühren, auch wenn der Boden nicht auf der Plattform ist, wird der Code das Zeichen auf denen setzt Plattform sowieso.
Ich habe versucht, es so zu machen, dass die Hitbox sehr klein ist (1 oder 3 Pixel hoch), aber der Charakter berührt die Plattform überhaupt nicht, weil die Geschwindigkeit den Charakter über die Plattform springen lässt. Wenn Sie den Wert auf 5 oder 7 Pixel erhöhen, tritt dasselbe Problem auf, wie oben beschrieben.
Gibt es eine einfache Möglichkeit, dies zu beheben?