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); } } }