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