Spieler fällt nicht mehr durch Platformen, wenn er mehrere gleichzeitig berührt

This commit is contained in:
2026-09-15 20:19:35 +02:00
parent dfe93e4da5
commit 6ee623cad4
2 changed files with 19 additions and 40 deletions
Binary file not shown.
+14 -35
View File
@@ -59,46 +59,25 @@ public class Player extends Actor
}
// Schwerkraft
private void fall()
{
private void fall() {
int oldY = getY();
verticalSpeed += gravity;
int newY = getY() + verticalSpeed;
setLocation(getX(), newY);
Actor ground = getOneIntersectingObject(Plattform.class);
if (ground != null && verticalSpeed >= 0)
{
int groundTop = ground.getY()
- ground.getImage().getHeight() / 2;
int characterBottom = getY()
+ getImage().getHeight() / 2;
// Nur landen, wenn der Spieler vorher über dem Boden war
int oldCharacterBottom = oldY
+ getImage().getHeight() / 2;
if (oldCharacterBottom <= groundTop &&
characterBottom >= groundTop)
{
setLocation(
getX(),
groundTop - getImage().getHeight() / 2
);
// Alle Plattformen überprüfen, die der Spieler berührt
java.util.List<Plattform> platforms = getIntersectingObjects(Plattform.class);
boolean landed = false;
for (Plattform platform : platforms) {
int groundTop = platform.getY() - platform.getImage().getHeight() / 2;
int characterBottom = getY() + getImage().getHeight() / 2;
int oldCharacterBottom = oldY + getImage().getHeight() / 2;
// Prüfen, ob der Spieler von oben auf diese Plattform fällt
if (verticalSpeed >= 0 && oldCharacterBottom <= groundTop && characterBottom >= groundTop) {
setLocation( getX(), groundTop - getImage().getHeight() / 2 );
verticalSpeed = 0;
onGround = true;
}
}
else
{
onGround = false;
}
landed = true;
break; }
} onGround = landed;
}
public boolean collision(){