Hey guys, i am trying to make my actor double jump.
Now i succeed in letting it jump multiple times, but for some reason it cant jump if iam on a platform
I think it has something to do with the following bit of code
I have tried many thins, but without succes, can some help me?
Here is the full code of the actor
if(onPlatform()){
vSpeed = 0;
GreenfootImage platformImage = under.getImage();
int topOfPlatform = under.getY() - platformImage.getHeight()/2;
setLocation(getX(), topOfPlatform - groundLevel);
}import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class player2 here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class player1 extends Actor
{
private int speed = 7;
private int vSpeed = 0;
private int acceleration = 1;
private int groundLevel = getImage().getHeight() / 2;
private int height = 0;
private int collision = 150;
private int sideWidth = getImage().getWidth() / 2;
private int jumps = 0;
private int jumpCooldown = 0;
private boolean jumping = false;
private World myWorld;
int worldHeight;
int worldWidth;
public void addedToWorld(World myWorld) {
this.myWorld = myWorld;
this.worldHeight = myWorld.getHeight();
this.worldWidth = myWorld.getWidth();
}
public void act()
{
checkKeys();
checkFall();
}
public boolean onPlatform(){
Actor under = getOneObjectAtOffset(0, groundLevel + 5 , platform2.class);
return under != null;
}
public void checkFall(){
Actor under = getOneObjectAtOffset(0, groundLevel +5 , platform2.class);
Actor platformAbove = getOneObjectAtOffset(0, - (groundLevel +5) , platform2.class);
Actor platformToRight = getOneObjectAtOffset(sideWidth + 5, 0 , platform2.class);
Actor platformToLeft = getOneObjectAtOffset(-(sideWidth + 5), 0 , platform2.class);
Actor playerToLeft = getOneIntersectingObject(player2.class);
if(onPlatform()){
vSpeed = 0;
GreenfootImage platformImage = under.getImage();
int topOfPlatform = under.getY() - platformImage.getHeight()/2;
setLocation(getX(), topOfPlatform - groundLevel);
}
else if(getY() >= worldHeight - groundLevel) {
vSpeed = 0;
setLocation(275, 550);
}
else {
acceleration = 1;
fall();
}
if (getX() >= 1299) {
setLocation(sideWidth,getY());
}
if (getX() <= 0) {
setLocation((1300 -(sideWidth +3)),getY());
}
if (platformAbove != null){
if (vSpeed < 0) {
vSpeed = 0;
GreenfootImage platformImage = platformAbove.getImage();
int bottomOfPlatform = platformAbove.getY() + platformImage.getHeight() / 2;
setLocation(getX(), bottomOfPlatform + groundLevel);
}
}
if (platformToRight !=null) {
setLocation(getX() - 1, getY()) ;
}
if (platformToLeft !=null) {
setLocation(getX() + 1, getY()) ;
}
if (playerToLeft !=null) {
jumpToSideRight();
}
}
private void jumpToSideRight() {
vSpeed = -17;
setLocation (getX()+ collision, getY()+ vSpeed);
vSpeed = vSpeed + acceleration;
}
private void jumpToSideLeft() {
vSpeed = -17;
setLocation (getX()- collision, getY()+ vSpeed);
vSpeed = vSpeed + acceleration;
}
private void checkKeys() {
if (Greenfoot.isKeyDown("a")) {
moveLeft();
setImage("player1_left.png");
}
if (Greenfoot.isKeyDown("d")) {
moveRight();
setImage("player1_right.png");
}
if (Greenfoot.isKeyDown("w") && jumping == false) {
jumps ++;
jumping = true;
jump();
}
if (jumping == true && !Greenfoot.isKeyDown("up")) {
jumping = false;
}
}
public void jump() {
vSpeed = -17;
}
public void moveRight() {
setLocation (getX() + speed, getY());
}
public void moveLeft() {
setLocation (getX() - speed, getY());
}
public void fall() {
setLocation (getX(), getY()+ vSpeed);
vSpeed = vSpeed + acceleration;
}
}

