How would I be able to detect when a key is released? I have code for when a key is held, using isKeyDown, but I'm looking for a method to detect when the key is released
public class ControlledCar extends Car
{
/**
* Act - do whatever the ControlledCar wants to do. This method is called whenever
* the 'Act' or 'Run' button gets pressed in the environment.
*/
public void act()
{
String key = Greenfoot.getKey();
setImage("car01.png");
if(Greenfoot.isKeyDown("up")) {
accelerate(.25);
wrap();
int speed = (int) this.speed;
move(speed);
}
if (key != null) {
if("up".equals(key)) {
while (this.speed > 0) {
accelerate(-.25);
wrap();
int speed = (int) this.speed;
move(speed);
}
}
if("down".equals(key)) {
while (this.speed > 0) {
accelerate(-.1);
wrap();
int speed = (int) this.speed;
move(-speed);
}
}
}
if(Greenfoot.isKeyDown("right")) {
turn(5);
}
if(Greenfoot.isKeyDown("down")) {
accelerate(.5);
wrap();
int speed = (int) this.speed;
move(-speed);
}
if(Greenfoot.isKeyDown("left")) {
turn(-5);
}
}
ControlledCar(String licenceIn, double speedIn, double maxSpeedIn) {
super("null", 0, 10);
}
}public class Car extends Actor
{
//setter vars
String licencePlate;
double speed;
double maxSpeed;
//setter methods
void setLicence(String licencePlate) { //setter method for licence plate
this.licencePlate = licencePlate; //licence plate changes to input
}
void setSpeed(double speed) { //setter method for speed
this.speed = speed; //speed changes to input
}
void setMaxSpeed(double maxSpeed) { //setter method for max speed
this.maxSpeed = maxSpeed; //maxspeed changes to input
}
//getter methods
String getLicence() { //getter method for licence plate
return this.licencePlate; //return this instances licence plate
}
double getSpeed() { //getter method for speed
return this.speed; //return this instances speed
}
double getMaxSpeed() { //getter method for max speed
return this.maxSpeed; //return this instances maxspeed
}
//extra methods
//'floor' it method
void floorIt() {
this.speed = this.maxSpeed; //set speed to maxspeed
}
//accelerate method
void accelerate(double velocity) {
this.speed += velocity; //change speed based on change in velocity
if (this.speed >= this.maxSpeed) { //test if new speed is greater
this.speed = this.maxSpeed; //if it is, speed = maxspeed
}
if (this.speed < 0.0) { //test if speed is less than 0
this.speed = 0.0; //if it is, speed = 0
}
}
public void act()
{
}
//creation of Car constructor
public Car(String licenceIn, double speedIn, double maxSpeedIn) { //take input of licence plate, speed, and max speed
licencePlate = licenceIn; //licencePlate var will always be the licenceIn
if (speedIn >= 0) { //check if speedIn is greater than 0
speed = speedIn; //if greater, speed = speedIn
} else {
speed = 0.0; //otherwise speed = 0
}
if (maxSpeedIn >= 0) { //check if maxspeed is greater than 0
maxSpeed = maxSpeedIn; //if greater, maxspeed = maxspeedin
} else {
maxSpeed = 0.0; //otherwise, maxspeed = 0
}
}
//wrap method to change location of object to other side of world
void wrap() {
if(getX() == getWorld().getWidth()-1) { //check if at edge of world width
setLocation(1, getY()); //set location to other edge
}
if(getY() == getWorld().getHeight()-1) { //check if at edge of world height
setLocation(getX(), 1); //set location to other edge
}
if(getX() == 0) { //check if at start of widths edge
setLocation(getWorld().getWidth()-1, getY()); //set location to other edge
}
if(getY() == 0) { //check if at start of heights edge
setLocation(getX(), getWorld().getHeight()-1); //set location to other edge
}
}
}if(Greenfoot.isKeyDown("up")) {
if (this.speed < this.maxSpeed) {
accelerate(.1);
}
wrap();
move(speed);
} else if (!Greenfoot.isKeyDown("up") && !Greenfoot.isKeyDown("down")) {
if (this.speed > 0) {
accelerate(-.2);
}
wrap();
move(speed);
}int d = 0;
if (Greenfoot.isKeyDown("up")) d++;
if (Greenfoot.isKeyDown("down")) d--;
double ds = -0.1; // assume no key (slowing down)
if (d != 0) ds = 0.2*d; // accelerating/decelerating
if (speed+ds < 0) ds = -speed; // stopping;
accelerate(ds);
wrap();
move(speed);public void act()
{
int speed = (int) this.speed;
setImage("car01.png");
int d = 0;
if (Greenfoot.isKeyDown("up")) d++;
if (Greenfoot.isKeyDown("down")) d--;
double ds = -0.1; // assume no key (slowing down)
if (d != 0) ds = 0.2*d; // accelerating/decelerating
if (speed+ds < 0) ds = -speed; // stopping;
accelerate(ds);
wrap();
move(speed);
if(Greenfoot.isKeyDown("right")) {
turn(5);
}
if(Greenfoot.isKeyDown("left")) {
turn(-5);
}
} import greenfoot.*;
public class Car extends Actor
{
double x, y, speed;
protected void addedToWorld(World w)
{
x = getX();
y = getY();
}
public void act()
{
moving();
turning();
}
private void turning()
{
int dr = 0;
if (Greenfoot.isKeyDown("left")) dr--;
if (Greenfoot.isKeyDown("right")) dr++;
turn(dr*3);
}
private void moving()
{
int d = 0;
if (Greenfoot.isKeyDown("up")) d++;
if (Greenfoot.isKeyDown("down")) d--;
double ds = -0.1;
if (d != 0) ds = 0.2*d;
if (speed+ds < 0) ds = -speed;
accelerate(ds);
move();
}
private void accelerate(double amt)
{
speed += amt;
if (speed > 5) speed = 5.0;
}
private void wrap()
{
int w = getWorld().getWidth();
int h = getWorld().getHeight();
x = (x+w)%w;
y = (y+h)%h;
}
private void move()
{
double angle = Math.PI*getRotation()/180;
double dx = Math.cos(angle)*speed;
double dy = Math.sin(angle)*speed;
x += dx;
y += dy;
wrap();
setLocation((int)x, (int)y);
}
}private void moving()
{
int d = 0;
if (Greenfoot.isKeyDown("up")) d++;
if (Greenfoot.isKeyDown("down")) d--;
double ds = -0.05*Math.signum(speed);
if (d != 0) ds = 0.2*d;
accelerate(ds);
move();
}
private void accelerate(double amt)
{
speed += amt;
if (Math.abs(speed) > 5) speed = 5.0*Math.signum(speed);
}