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.
+19 -40
View File
@@ -58,48 +58,27 @@ public class Player extends Actor
} }
} }
// Schwerkraft // Schwerkraft
private void fall() private void fall() {
{ int oldY = getY();
int oldY = getY(); verticalSpeed += gravity;
int newY = getY() + verticalSpeed;
verticalSpeed += gravity; setLocation(getX(), newY);
// Alle Plattformen überprüfen, die der Spieler berührt
int newY = getY() + verticalSpeed; java.util.List<Plattform> platforms = getIntersectingObjects(Plattform.class);
boolean landed = false;
setLocation(getX(), newY); for (Plattform platform : platforms) {
int groundTop = platform.getY() - platform.getImage().getHeight() / 2;
Actor ground = getOneIntersectingObject(Plattform.class); int characterBottom = getY() + getImage().getHeight() / 2;
int oldCharacterBottom = oldY + getImage().getHeight() / 2;
if (ground != null && verticalSpeed >= 0) // Prüfen, ob der Spieler von oben auf diese Plattform fällt
{ if (verticalSpeed >= 0 && oldCharacterBottom <= groundTop && characterBottom >= groundTop) {
int groundTop = ground.getY() setLocation( getX(), groundTop - getImage().getHeight() / 2 );
- 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
);
verticalSpeed = 0; verticalSpeed = 0;
onGround = true; landed = true;
} break; }
} onGround = landed;
} }
else
{
onGround = false;
}
}
public boolean collision(){ public boolean collision(){
if (getIntersectingObjects(Projectile.class).size()>0) if (getIntersectingObjects(Projectile.class).size()>0)