Hello,
my Actor does not rebound on the corner. He rebounds with his top on the ceiling, but he jumps through the ceiling at the corners. I would be grateful for your help.
My Code:
An Image:

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Feuerlinks here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Feuer extends Actor
{
/**
* Act - do whatever the Feuerlinks wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
private int hspeed=6;
private int vspeed=0;
private int beschleunigung = 2;
private int vmax=8;
private boolean Sprungtaste;
private GreenfootImage li1 = new GreenfootImage("Feuer-links1.png");
private GreenfootImage li2 = new GreenfootImage("Feuer-links2.png");
private GreenfootImage li3 = new GreenfootImage("Feuer-links3.png");
private GreenfootImage li4 = new GreenfootImage("Feuer-links4.png");
private GreenfootImage li5 = new GreenfootImage("Feuer-links.png");
private GreenfootImage re1 = new GreenfootImage("Feuer-rechts1.png");
private GreenfootImage re2 = new GreenfootImage("Feuer-rechts2.png");
private GreenfootImage re3 = new GreenfootImage("Feuer-rechts3.png");
private GreenfootImage re4 = new GreenfootImage("Feuer-rechts4.png");
private GreenfootImage re5 = new GreenfootImage("Feuer-rechts.png");
private int frame = 1 ;
private int counter = 0;
private int richtung=0;
public void moveRight()
{
setLocation (getX() + hspeed, getY());
}
public void moveLeft()
{
setLocation (getX() - hspeed, getY());
}
public void fall()
{
setLocation (getX(), getY() + vspeed);
vspeed= vspeed + beschleunigung;
}
public boolean unten()
{
Actor unten = getOneObjectAtOffset (0,(getImage().getHeight() / 2), abstossen.class);
return unten != null;
}
public void sprung()
{
vspeed = -25;
fall();
}
public void Animationlinks()
{
if (richtung == 0)
{
if(frame == 1)
{
setImage(li1);
}
else if(frame == 2)
{
setImage(li2);
}
else if(frame == 3)
{
setImage(li3);
}
else if(frame == 4)
{
setImage(li4);
}
else if(frame == 5)
{
setImage(li5);
frame = -15;
return;
}
frame ++;
}
}
public void Animationrechts()
{
if (richtung == 1)
{
if(frame == 1)
{
setImage(re1);
}
else if(frame == 2)
{
setImage(re2);
}
else if(frame == 3)
{
setImage(re3);
}
else if(frame == 4)
{
setImage(re4);
}
else if(frame == 5)
{
setImage(re5);
frame = -15;
return;
}
frame ++;
}
}
public void act()
{
counter ++;
if (Greenfoot.isKeyDown("left"))
{
{ Actor links = getOneObjectAtOffset (-1*((getImage().getWidth()/2)),1,abstossen.class);
if (links != null)
{
}
else
{
setImage("Feuer-linkse.png");
moveLeft();
richtung=0;
}
}
}
if (Greenfoot.isKeyDown("right"))
{
{ Actor rechts = getOneObjectAtOffset ((getImage().getWidth()/2), 0 , abstossen.class);
if (rechts != null)
{
}
else
{
setImage("Feuer-rechtse.png");
moveRight();
richtung=1;
}
}
}
if (unten())
{
vspeed=0;
}
else{
fall();
}
if (vspeed > vmax)
{
vspeed=vmax;
}
if (Sprungtaste != Greenfoot.isKeyDown("up"))
{
Sprungtaste = ! Sprungtaste;
if (Sprungtaste && unten())
{
sprung();
}
}
//gegen die Decke stoßen
Actor oben = getOneObjectAtOffset (0, -1*(getImage().getHeight()/2), abstossen.class);
if (oben != null)
{
vspeed=0;
fall();
}
else
{
}
if (richtung==0)
{
if (counter % 4 == 0)
{
Animationlinks();
}
}
if (richtung==1)
{
if (counter % 4 == 0)
{
Animationrechts();
}
}
}
}

