-1

My problem is that when ever my character moves into the side of the map it slowly moves more into the wall(even but when the character dies this stops. Can you tell me what to change about my code so this wont happen?

package Slick.jar;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Play extends BasicGameState{

    //initializing variables
    Animation bucky, movingUp, movingDown, movingLeft, movingRight;
    Image worldMap;
    boolean quit = false;
    int[] duration = {200,200};
    float buckyPositionX = 0;
    float buckyPositionY = 0;
    float shiftX = buckyPositionX + 320;
    float shiftY = buckyPositionY + 160;
    boolean notPaused = true;
    boolean running = false;
    float speedL = 0;
    float speedR = 0;
    float speedU = 0;
    float speedD = 0;
    boolean ableToMoveL = true;
    boolean ableToMoveR = true;
    boolean ableToMoveU = true;
    boolean ableToMoveD = true;
    int health = 1000;
    boolean dead = false;
    float bounceL = speedL/2;  
    float bounceR = speedR/2;
    float bounceU = speedU/2;
    float bounceD = speedD/2;


    public Play(int state){

    }

    public void init(GameContainer gc, StateBasedGame sbg)throws SlickException{
        //initializing images
        worldMap = new Image("res/world.png");
        Image[] walkUp = {new Image("res/buckysBack.png"), new Image("res/buckysBack.png")};
        Image[] walkDown = {new Image("res/buckysFront.png"), new Image("res/buckysFront.png")};
        Image[] walkLeft = {new Image("res/buckysLeft.png"), new Image("res/buckysLeft.png")};
        Image[] walkRight = {new Image("res/buckysRight.png"), new Image("res/buckysRight.png")};
        //creating animations
        movingUp = new Animation(walkUp, duration, false);
        movingDown = new Animation (walkDown, duration, false);
        movingLeft = new Animation (walkLeft, duration, false);
        movingRight = new Animation (walkRight, duration, false);
        bucky = movingDown;
    }   
    public void render(GameContainer gc, StateBasedGame sbg, Graphics g)throws SlickException{
        //drawing images onto canvas
        worldMap.draw(buckyPositionX, buckyPositionY);
        bucky.draw(shiftX, shiftY);
        g.drawString("Buckys X: "+buckyPositionX+"\n Y: "+buckyPositionY, 400, 200);
        g.drawString("Health: " + health, 400, 250);
        g.drawString("speedL: " + speedL , 10, 50);
        g.drawString("speedR: " + speedR , 10, 75);
        g.drawString("speedU: " + speedU , 10, 100);
        g.drawString("speedD: " + speedD , 10, 125);
        //seeing if player wants to quit
        if(quit==true){
            g.drawString("Resume (R)", 250, 100);
            g.drawString("Main Menu (M)", 250, 150);
            g.drawString("Quit Game (Q)", 250, 200);
            if(quit==false){
                g.clear();
            }   
        }
        if(health == 0)
            dead = true;
        if(dead){
            g.drawString("You are dead", 250, 100);
            ableToMoveR = false;
            ableToMoveL = false;
            ableToMoveU = false;
            ableToMoveD = false;
            speedU = 0;
            speedD = 0;
            speedL = 0;
            speedR = 0;
            g.drawString("Press (R) to respawn", 250, 125);
            if(!dead)
                g.clear();
        }
    }   

    public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException{
        Input input = gc.getInput();
        float bounceL = speedL/2;  
        float bounceR = speedR/2;
        float bounceU = speedU/2;
        float bounceD = speedD/2;
        if(health == 0){
            ableToMoveR = false;
            ableToMoveL = false;
            ableToMoveU = false;
            ableToMoveD = false;
            dead = true;
        }
        //creating velocity movement
        if(ableToMoveR){
            buckyPositionX += speedR;
            if(!ableToMoveR)
                speedR = 0.1f;
        }
        if(ableToMoveL){
            buckyPositionX += speedL;
            if(!ableToMoveL)
                speedL = 0.1f;
        }
        if(ableToMoveU){
            buckyPositionY += speedU;
            if(!ableToMoveU)
                speedU = 0.1f;
        }
        if(ableToMoveD){
            buckyPositionY += speedD;
            if(!ableToMoveD)
                speedD = 0.1f;
        }
        //creating "slow-down" system
        if(!input.isKeyDown(input.KEY_W)){
            if(speedU >= 0)
                speedU -= .01f;
            if(speedU > 0 && speedU < .01f)
                speedU = 0;
        } 
        if(!input.isKeyDown(input.KEY_S)){
            if(speedD <= 0)
                speedD += .01f;
            if(speedD > 0 && speedD < .01f)
                speedD = 0;
        }
        if(!input.isKeyDown(input.KEY_A)){
            if(speedL >= 0)
                speedL -= .01f;
            if(speedL > 0 && speedL < .01f)
                speedL = 0;
        }
        if(!input.isKeyDown(input.KEY_D)){
            if(speedR <= 0)
                speedR += .01f;
            if(speedR < 0 && speedR > -.01f)
                speedR = 0;
        }
        //creating crash detection
        if(buckyPositionX<-840){
            speedR = 0.01f;
            if(health > 0)
                health--;
            ableToMoveR = false;
        } else
            ableToMoveR = true;
        if(buckyPositionY<-600){
            speedD = 0.01f;
            if(health > 0)
                health--;
            ableToMoveD = false;
        } else
            ableToMoveD = true;
        if(buckyPositionY>162){
            speedU = -0.01f;
            if(health > 0)
                health--;
            ableToMoveU = false;
        } else
            ableToMoveU = true;
        if(buckyPositionX>320){
            speedL = -0.01f;
            if(health > 0)
                health--;
            ableToMoveL = false;
        } else
            ableToMoveL = true;

            //seeing if player wants to run
        if(input.isKeyDown(input.KEY_LSHIFT))
            running = true;
        else
            running = false;
        //seeing if paused
        if(notPaused == true){
            if(ableToMoveU){ 
                //letting you move/run up
                if(input.isKeyDown(input.KEY_W)&&running==false ){
                        bucky = movingUp;
                        if(speedU < 5)
                            speedU += .005f;
                    }
                if(input.isKeyDown(input.KEY_W)&&running==true ){
                    bucky = movingUp;
                    if(speedU < 5)
                        speedU += .01f;
                }
            }
            //letting you move/run down
            if(ableToMoveD){
                if(input.isKeyDown(input.KEY_S)&&running==false){
                    bucky = movingDown;
                    if(speedD > -5)
                        speedD -= .005f;
                    }
                if(input.isKeyDown(input.KEY_S)&&running==true){
                    bucky = movingDown;
                    if(speedD > -5)
                    speedD -= .01f;
                }
            }
            //letting you move/run left
            if(ableToMoveL){
                if(input.isKeyDown(input.KEY_A)&&running==false){
                    bucky = movingLeft;
                    if(speedL < 5)
                        speedL += .005f;
                    }
                if(input.isKeyDown(input.KEY_A)&&running==true){
                    bucky = movingLeft;
                    if(speedL < 5)
                        speedL += .01f;
                }
            }
            //letting you move/run right
            if(ableToMoveR){
                if(input.isKeyDown(input.KEY_D)&&running==false){
                    bucky = movingRight;
                    if(speedR > -5)
                        speedR -= .01f;
                    } 
                if(input.isKeyDown(input.KEY_D)&&running==true){
                    bucky = movingRight;
                    if(speedR > -5)
                    speedR -= .02f;
                        }
                    }
                }
            //escape        
            if(input.isKeyDown(input.KEY_ESCAPE)){
                quit = true;
                notPaused = false;
            }

            if(dead){
                if(input.isKeyDown(input.KEY_R)){
                    dead = false;
                    health = 1000;
                    buckyPositionX = 0;
                    buckyPositionY = 0;
                }
            }
            //menu is up
            if(quit==true){
                if(input.isKeyDown(input.KEY_R)){
                    quit = false;
                    notPaused = true;
                }
                if(input.isKeyDown(input.KEY_M)){
                    sbg.enterState(0);
                }
                if(input.isKeyDown(input.KEY_Q)){
                    System.exit(0);
                }
            }
        if(input.isKeyDown(input.KEY_X))
                health = 0;
    }

    public int getID(){
        return 1;
    }
}

P.S. There are two other classes, but they have no play in this issue, but if you need them just ask.

P.P.S. If you need more information just ask.

RPresle
  • 2,436
  • 3
  • 24
  • 28
DrDrep
  • 11
  • 3

1 Answers1

0

I'm not sure because the indent is not perfect but I think there us a problem in these lines

if(!input.isKeyDown(input.KEY_W)){
    if(speedU >= 0)
        speedU -= .01f;
    if(speedU > 0 && speedU < .01f)
        speedU = 0;
} 

if key is not pressed, and speedU==0 THEN speedU -= .01f; so at the end speedU==-.01f. it may explain why it still moves.

Some more advice for you

  • Always put bracket around your if and else
  • Always indent correctly when posting, it give you more chance to be answered

and finally these line are not good because you test same the opposite of what let you enter the if

if(ableToMoveL){ // TRUE
    buckyPositionX += speedL;
    if(!ableToMoveL) //  FALSE
        speedL = 0.1f;
}
RPresle
  • 2,436
  • 3
  • 24
  • 28