3

我在 youtube 上观看 thenewboston 的教程,所以现在我正在创建“Bucky's Land”。这段代码目前允许我向左、向右、向上和向下移动我的角色。它会根据玩家的移动方式改变玩家的侧面。我是java的初学者,我想知道如何让我的角色跳跃。任何帮助,将不胜感激!

package javagame;

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

public class Play extends BasicGameState{

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 jumping = false; 
float verticalSpeed = 0.0f;

public Play(int state){
}

public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
   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")};

      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{
   worldMap.draw(buckyPositionX, buckyPositionY);
   bucky.draw(shiftX, shiftY);
   g.drawString("Buckys X: "+buckyPositionX+"\nBuckys Y: "+buckyPositionY, 400, 20);

   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();
         }
    }
 }

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{
   Input input = gc.getInput();
   if(input.isKeyDown(Input.KEY_UP)){
         bucky = movingUp; //change bucky to up image
         buckyPositionY += delta * .1f; //increase the Y coordinates of bucky (move him up)
         if(buckyPositionY>162){
            buckyPositionY -= delta * .1f; //dont let him keep going up if he reaches the top
         }
      }
      if(input.isKeyDown(Input.KEY_DOWN)){
         bucky = movingDown;
         buckyPositionY -= delta * .1f;
         if(buckyPositionY<-600){
            buckyPositionY += delta * .1f;
         }
      }
      if(input.isKeyDown(Input.KEY_LEFT)){
         bucky = movingLeft;
         buckyPositionX += delta * .1f;
         if(buckyPositionX>324){
            buckyPositionX -= delta * .1f;
         }
      }
      if(input.isKeyDown(Input.KEY_RIGHT)){
         bucky = movingRight;
         buckyPositionX -= delta * .1f;
         if(buckyPositionX<-840){
            buckyPositionX += delta * .1f;
         }
      }
        //when they hit escape
      if(quit==true){
         if(input.isKeyDown(Input.KEY_R)){
            quit = false;
         }
         if(input.isKeyDown(Input.KEY_M)){
            sbg.enterState(0);
            try{
               Thread.sleep(250);
            }catch(InterruptedException e){
               e.printStackTrace();
            }
         }
         if(input.isKeyDown(Input.KEY_Q)){
            System.exit(0);

         }
     }
}

public int getID(){
  return 1;
    }
}
4

1 回答 1

2

为此,您需要一些物理知识。这个想法是,例如,当有人按下空格键时,您将角色的速度设置为例如 5 up。每一秒你从它减去 1 并将它添加到角色的高度,直到他再次撞到地面。您可能还希望将速度限制为 (5,-5)

于 2012-08-01T17:24:13.347 回答