I have an an actor subclass called villager under a superclass called Pedestrian. When he gets touched by an actor called RootedCorpse, I want the villagers image to change into a different image (i have the image in the images folder already called rootedvillager.png). how would i implement this?
Villager class:
Pedestrian Class:
RootedCorpse class:
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Villager here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Villager extends Pedestrian
{
public Villager(int dir)
{
super(dir);
GreenfootImage image = getImage();
image.scale(image.getWidth() - 340, image.getHeight() - 340);
setImage(image);
}
/**
* Act - do whatever the Villager wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
move();
}
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* A Pedestrian that tries to walk across the street
*/
public abstract class Pedestrian extends SuperSmoothMover
{
protected double speed;
protected double maxSpeed;
protected int direction; // direction is always -1 or 1, for moving down or up, respectively
protected boolean awake;
public Pedestrian()
{
this(1);
}
public Pedestrian(int direction) {
// choose a random speed
maxSpeed = Math.random() * 2 + 1;
speed = maxSpeed;
// start as awake
awake = true;
this.direction = direction;
}
/**
* Act - do whatever the Pedestrian wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void move()
{
// If there is a v
if (awake){
if (getOneObjectAtOffset(0, (int)(direction * getImage().getHeight()/2 + (int)(direction * speed)), Vehicle.class) == null){
//setLocation (getX(), getY() + (speed*direction));
setLocation(getPreciseX(), getPreciseY()+speed*direction);
}
if (direction == -1 && getY() < 100){
getWorld().removeObject(this);
} else if (direction == 1 && getY() > 550){
getWorld().removeObject(this);
}
}
}
/**
* Method to cause this Pedestrian to become knocked down - stop moving, turn onto side
*/
public void knockDown () {
speed = 0;
setRotation (90);
awake = false;
}
public void rooted ()
{
speed = maxSpeed/2;
}
/**
* Method to allow a downed Pedestrian to be healed
*/
public void healMe () {
speed = maxSpeed;
setRotation (0);
awake = true;
}
public boolean isAwake () {
return awake;
}
}
a description of class RootedCorpse here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class RootedCorpse extends Vehicle
{
/**
* Act - do whatever the RootedCorpse wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public RootedCorpse(VehicleSpawner origin) {
super(origin); // call the superclass' constructor
GreenfootImage image = getImage();
image.scale(image.getWidth() - 70, image.getHeight() - 120);
setImage(image);
maxSpeed = 1.5 + ((Math.random() * 30)/5);
speed = maxSpeed;
yOffset = 0;
}
public void act()
{
drive();
checkHitPedestrian();
if (checkEdge()){
getWorld().removeObject(this);
}
}
/**
* When a Car hit's a Pedestrian, it should knock it over
*/
public boolean checkHitPedestrian () {
Pedestrian p = (Pedestrian)getOneObjectAtOffset((int)speed + getImage().getWidth()/2, 0, Pedestrian.class);
if (p != null){
p.rooted();
return true;
}
return false;
}
}
