I am in the process of writing a game where you must avoid the obstacles and am having problems with actor collision working through my Hero class. I think that the problem is with the isTouchingEnemy method but do now know how to fix it. Please help!!!
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Hero here.
*
* @author Andrew Fantino
* @version 5/6/18
*/
public class Hero extends SmoothMover implements Killable
{
private int health;
private double speed;
private World world;
/**
* this is the constructor for hero
*
* @param world
*/
public Hero (World world) {
this.world = world;
health = 3;
speed = 5.0;
}
/**
* act - do whatever the Hero wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
controlledMovement();
}
/**
* controlledMovement - Allows the hero to be controlled and for next move to be
* qued with either arrows or wasd depending on what was used previously. This is
* a feature that will allow advance players to have greater control of the hero
* and increases the skill cap.
*/
private void controlledMovement(){
if((Greenfoot.isKeyDown("a") || Greenfoot.isKeyDown("left")) &&
this.getExactX() >= 0){
this.move(-speed);
} else if ((Greenfoot.isKeyDown("d") || Greenfoot.isKeyDown("right")) &&
this.getExactX() <= 800) {
this.move(speed);
} else if ((Greenfoot.isKeyDown("w") || Greenfoot.isKeyDown("up")) &&
this.getExactY() >= 0) {
this.setLocation(this.getExactX(), this.getExactY()-speed);
} else if ((Greenfoot.isKeyDown("s") || Greenfoot.isKeyDown("down")) &&
this.getExactY() <= 450) {
this.setLocation(this.getExactX(), this.getExactY()+speed);
}
}
/**
* getHealth - gets the health of the instance of hero
*
* @return health
*/
public int getHealth() {
return this.health;
}
/**
* getSpeed - gets the speed of the instance of the hero
*
* @return speed
*/
public double getSpeed() {
return this.speed;
}
/**
* setSpeed - sets the speed of the instance of the hero
*
* @param speed
*/
public void setSpeed(double speed) {
this.speed = speed;
}
/**
* decreaseHealth - decreases health by param amount
*
* @param amount
*/
public int decreaseHealth(int amount) {
return health-amount;
}
/**
* increaseHealth - increases health by 1
*
* @return health
*/
public int increaseHealth() {
return health+1;
}
/**
* die - sets the world to the game over screen
*/
public void die() {
if (isDead()) {
System.out.println("DEAD #2");
Greenfoot.setWorld(new GameOver());
}
}
/**
* isDead() - checks if health is 0 or below
*
* @return isDead
*/
public boolean isDead() {
if(this.getHealth() <= 0) {
return true;
} else {
return false;
}
}
public boolean isTouchingEnemy() {
Actor e = getOneIntersectingObject(Enemy.class);
if (e != null) {
return true;
} else {
return false;
}
}
public void takeDamage() {
if (isTouchingEnemy()) {
this.getWorld().getHealthBar().loseHealth(this);
die();
}
}
/**
* getWorld - gets the world that the Hero is instanciated
* in.
*
* @return world
*/
public MyWorld getWorld() {
return (MyWorld)world;
}
}
