So I have a main actor called "Man" and an enemy called "Skull". Whenever Man walks into Skull he merges a little too much before being killed. How would I make it so that the Man class doesn't merge with the Skull class and dies on contact?
Man:
Skull
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Main character in Scribble Jumper
*
* @rrose5
* @7/2/2014
*/
public class Man extends Actor
{
private int vSpeed = 0;
private int acceleration = 2;
private boolean jumping;
private int jumpStrength = 20;
private int speed = 4;
private GreenfootImage run1 = new GreenfootImage("run1.png");
private GreenfootImage run2 = new GreenfootImage("run2.png");
private GreenfootImage run3 = new GreenfootImage("run3.png");
private GreenfootImage run4 = new GreenfootImage("run4.png");
private GreenfootImage run1l = new GreenfootImage("run1l.png");
private GreenfootImage run2l = new GreenfootImage("run2l.png");
private GreenfootImage run3l = new GreenfootImage("run3l.png");
private GreenfootImage run4l = new GreenfootImage("run4l.png");
private int frame = 1;
private int animationCounter = 0;
/**
* Act - do whatever the Man wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
checkFall();
checkKey();
platformAbove();
checkRightWalls();
checkLeftWalls();
animationCounter ++;
}
public void checkKey()
{
if(Greenfoot.isKeyDown("space") && jumping == false)
{
jump();
}
if(Greenfoot.isKeyDown("d"))
{
moveRight();
}
if(Greenfoot.isKeyDown("a"))
{
moveLeft();
}
}
public void moveRight()
{
setLocation(getX()+speed, getY());
if(animationCounter % 4 == 0)
animateRight();
}
public void animateRight()
{
if(frame == 1)
{
setImage(run1);
}
else if(frame == 2)
{
setImage(run2);
}
else if(frame == 3)
{
setImage(run3);
}
else if(frame == 4)
{
setImage(run4);
frame = 1;
return;
}
frame ++;
}
public void moveLeft()
{
setLocation(getX()-speed, getY());
if(animationCounter % 4 == 0)
animateLeft();
}
public void animateLeft()
{
if(frame == 1)
{
setImage(run1l);
}
else if(frame == 2)
{
setImage(run2l);
}
else if(frame == 3)
{
setImage(run3l);
}
else if(frame == 4)
{
setImage(run4l);
frame = 1;
return;
}
frame ++;
}
public void fall()
{
setLocation(getX(), getY() +vSpeed);
if(vSpeed <=9)
{
vSpeed = vSpeed + acceleration;
}
jumping = true;
}
public boolean onGround()
{
int spriteHeight = getImage().getHeight();
int lookForGround = (int)(spriteHeight/2) + 5;
Actor ground = getOneObjectAtOffset(0, lookForGround, Ground.class);
if(ground == null)
{
jumping = true;
return false;
}
else
{
moveToGround(ground);
return true;
}
}
public boolean platformAbove()
{
int spriteHeight = getImage().getHeight();
int yDistance = (int)(spriteHeight/ -2);
Actor ceiling = getOneObjectAtOffset(0, yDistance, Ground.class);
if(ceiling != null)
{
vSpeed =1;
bopHead(ceiling);
return true;
}
else
{
return true;
}
}
public boolean checkRightWalls()
{
int spriteWidth = getImage().getWidth();
int xDistance = (int)(spriteWidth/2);
Actor rightWall = getOneObjectAtOffset (xDistance, 0, Ground.class);
if(rightWall == null)
{
return false;
}
else
{
stopByRightWall (rightWall);
return true;
}
}
public void stopByRightWall (Actor rightWall)
{
int wallWidth = rightWall.getImage().getWidth();
int newX = rightWall.getX() -(wallWidth + getImage().getWidth())/2;
setLocation(newX -3, getY());
}
public boolean checkLeftWalls()
{
int spriteWidth = getImage().getWidth();
int xDistance = (int)(spriteWidth/2);
Actor leftWall = getOneObjectAtOffset (-xDistance, 0, Ground.class);
if(leftWall == null)
{
return false;
}
else
{
stopByLeftWall (leftWall);
return true;
}
}
public void stopByLeftWall (Actor leftWall)
{
int wallWidth = leftWall.getImage().getWidth();
int newX = leftWall.getX() +(wallWidth + getImage().getWidth())/2;
setLocation(newX +3, getY());
}
public void bopHead (Actor ceiling)
{
int ceilingHeight = ceiling.getImage().getHeight();
int newY = ceiling.getY() + (ceilingHeight + getImage().getHeight())/2;
setLocation(getX(), newY);
}
public void moveToGround(Actor ground)
{
int groundHeight = ground.getImage().getHeight();
int newY = ground.getY() - (groundHeight + getImage().getHeight())/2;
setLocation(getX(), newY);
jumping = false;
}
public void checkFall()
{
if(onGround())
{
vSpeed =0;
}
else
{
fall();
}
}
public void jump()
{
vSpeed = vSpeed - jumpStrength;
jumping = true;
fall();
}
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Main character in Scribble Jumper
*
* @rrose5
* @7/2/2014
*/
public class Skull extends Actor
{
private int vSpeed = 0;
private int acceleration = 2;
private int spriteHeight = getImage().getHeight();
private int spriteWidth = getImage().getWidth();
private int lookForGroundDistance = (int)spriteHeight/2;
private int lookForEdge = (int)spriteWidth/2;
private int speed = 1;
/**
* Act - do whatever the Man wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
checkFall();
move();
kill();
}
public void move()
{
Actor ground = getOneObjectAtOffset(lookForEdge, lookForGroundDistance, Ground.class);
if(ground == null)
{
speed *= -1;
lookForEdge *= -1;
}
else
{
move(speed);
}
}
public void fall()
{
setLocation(getX(), getY() +vSpeed);
if(vSpeed <=9)
{
vSpeed = vSpeed + acceleration;
}
}
public boolean onGround()
{
int spriteHeight = getImage().getHeight();
int lookForGround = (int)(spriteHeight/2) + 5;
Actor ground = getOneObjectAtOffset(0, lookForGround, Ground.class);
if(ground == null)
{
return false;
}
else
{
moveToGround(ground);
return true;
}
}
public void moveToGround(Actor ground)
{
int groundHeight = ground.getImage().getHeight();
int newY = ground.getY() - (groundHeight + getImage().getHeight())/2;
setLocation(getX(), newY);
}
public void checkFall()
{
if(onGround())
{
vSpeed =0;
}
else
{
fall();
}
}
public void kill()
{
Actor man;
man = getOneObjectAtOffset(0, 0, Man.class);
if (man != null)
{
World world;
world = getWorld();
world.removeObject(man);
}
}
}

