使用Java制作Doodle跳跃:如何让Doodle跳跃

使用Java制作Doodle跳跃:如何让Doodle跳跃,java,swing,keylistener,Java,Swing,Keylistener,我正在制作一个涂鸦跳跃游戏,我很困惑。我必须让涂鸦跳起来,但我太迷路了。我已将键(空格、A、D)放入KeyListener,我不确定它为什么不工作。我按了空格键,但我不知道如何使涂鸦真正跳跃。我试着用翻译的方法,但不起作用 import java.awt.Color; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; i

我正在制作一个涂鸦跳跃游戏,我很困惑。我必须让涂鸦跳起来,但我太迷路了。我已将键(空格、A、D)放入KeyListener,我不确定它为什么不工作。我按了空格键,但我不知道如何使涂鸦真正跳跃。我试着用翻译的方法,但不起作用

    import java.awt.Color;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;


    public class DoodleJumpFrame extends JFrame implements KeyListener
    {
     private static final int FRAME_WIDTH = 600;
     private static final int FRAME_HEIGHT = 500;

     private JPanel panel;
     private DoodleJumpComponent game;


public DoodleJumpFrame() 
{
    super();
    panel = new JPanel();
    game = new DoodleJumpComponent();
    init();
}

public void init()
{
    panel.add(game);
    panel.setBackground(Color.WHITE);

    addKeyListener(this); 
}

public void addPanel() 
{
    this.add(panel);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public void run() 
{
    game.start();
}

@Override
public void keyPressed(KeyEvent e)
{
   
   int keycode = e.getKeyCode(); 
   if (keycode == KeyEvent.VK_SPACE)
   {
      game.setSpacePressed(true);
   
   }
   
   if (keycode == KeyEvent.VK_A)
   {
      game.setLeftPressed(true);
   
   }
   if (keycode == KeyEvent.VK_D)
   {
      game.setRightPressed(true);
   
   }
   
 
    
}

@Override
public void keyReleased(KeyEvent e)
{
   int keycode = e.getKeyCode(); 
   if (keycode == KeyEvent.VK_SPACE)
   {
      game.setSpacePressed(false);
      System.out.println("yes");
   }
   
   if (keycode == KeyEvent.VK_A)
   {
      game.setLeftPressed(false);
   
   }
   if (keycode == KeyEvent.VK_D)
   {
      game.setRightPressed(false);
   
   }
    
    
}

@Override
public void keyTyped(KeyEvent e)
{
    // TODO Auto-generated method stub
    
}
}

我的另一个班级:

       import java.awt.Image;
      import java.awt.Rectangle;
     import java.awt.geom.Rectangle2D;
     import java.util.ArrayList;

     import javax.swing.ImageIcon;


      public class Doodle
     {
       private ImageIcon io;
       private Image i;
       private float x, y = 0;
       private double speedX, speedY = 0;
       private static int PIC_HEIGHT = 45;
       private static int PIC_WIDTH = 45;
       private boolean leftPressed, rightPressed, spacePressed, UPressed, IPressed;
       private Rectangle2D hitbox = new Rectangle((int)x,(int)y,PIC_HEIGHT,PIC_WIDTH);
   
   public Rectangle2D getHitbox()
   {
       return hitbox;
   }
   public void setHitbox(Rectangle2D hitbox)
   {
       this.hitbox = hitbox;
   }
   public Doodle(int x, int y) 
   {
       this.x = x;
       this.y = y;
       io = new ImageIcon(this.getClass().getResource("doodle.jpeg"));
       i = io.getImage();
   }
   
   public void tick(ArrayList<Platform> tiles) 
   {
       hitbox.setRect((int)x,(int)y,PIC_HEIGHT,PIC_WIDTH);
       move(tiles);
   }
   public void move(ArrayList<Platform> tiles) {
       
       if(rightPressed) {
           x+=5;
       }
       if(leftPressed) {
           x-=5;
       }
       if(x>320-PIC_WIDTH) {
           speedX = 0;
           x = 320-PIC_WIDTH;
       }
       if(x<0) {
           speedX = 0;
           x = 0;
           
      
       }
       jump(tiles);
   }
   public void jump(ArrayList<Platform> tiles) {
       
       for(int i = 0; i<tiles.size(); i++) {   
           if(hitbox.intersects(tiles.get(i).getRect())||y+PIC_HEIGHT>620) {
               speedY=-15;
           }
       }
       if(y+PIC_HEIGHT<620) speedY+=1;
       speedY*=0.9;
       y+=speedY;
       
   }
   public ImageIcon getIo()
   {
       return io;
   }
   public void setIo(ImageIcon io)
   {
       this.io = io;
   }
   public Image getI()
   {
       return i;
   }
   public void setI(Image i)
   {
       this.i = i;
   }
   public float getX()
   {
       return x;
   }
   public void setX(float x)
   {
       this.x = x;
   }
   public float getY()
   {
       return y;
   }
   public void setY(float y)
   {
       this.y = y;
   }
   public static int getPIC_HEIGHT()
   {
       return PIC_HEIGHT;
   }
   public static void setPIC_HEIGHT(int pIC_HEIGHT)
   {
       PIC_HEIGHT = pIC_HEIGHT;
   }
   public static int getPIC_WIDTH()
   {
       return PIC_WIDTH;
   }
   public static void setPIC_WIDTH(int pIC_WIDTH)
   {
       PIC_WIDTH = pIC_WIDTH;
   }
   
   
   public void leftPressed(boolean leftPressed)
   {
       this.leftPressed =leftPressed;      
   }
   public void rightPressed(boolean rightPressed)
   {
       this.rightPressed = rightPressed;           
   }
   public void spacePressed(boolean spacePressed)
   {
       this.spacePressed = spacePressed;       
   }
   public void UPressed(boolean UPressed)
   {
       this.UPressed = UPressed;
   }
   public void IPressed(boolean IPressed)
   {
       this.IPressed = IPressed;
   }
 
   
导入java.awt.Image;
导入java.awt.Rectangle;
导入java.awt.geom.Rectangle2D;
导入java.util.ArrayList;
导入javax.swing.ImageIcon;
公共课涂鸦
{
专用图像图标io;
私人形象一;
私有浮动x,y=0;
专用双速X,速=0;
专用静态int PICU高度=45;
私有静态int PIC_WIDTH=45;
私有布尔值leftPressed、righpressed、spacePressed、uppressed、ippressed;
私有矩形2D点击框=新矩形((int)x,(int)y,PIC_高度,PIC_宽度);
公共矩形2D getHitbox()
{
返回对话框;
}
公共无效设置hitbox(矩形2D hitbox)
{
this.hitbox=hitbox;
}
公共涂鸦(整数x,整数y)
{
这个.x=x;
这个。y=y;
io=新图像图标(this.getClass().getResource(“doodle.jpeg”);
i=io.getImage();
}
公共空白勾号(ArrayList磁贴)
{
hitbox.setRect((int)x,(int)y,图片高度,图片宽度);
移动(瓷砖);
}
公共无效移动(ArrayList磁贴){
如果(右键按下){
x+=5;
}
如果(左按){
x-=5;
}
如果(x>320-PIC_宽度){
speedX=0;
x=320-PIC_宽度;
}

如果(xIs)这是你所有的代码?我没有看到你的。那么你是说键侦听器不工作?这与你的跳转无关?这有很多帮助。它提供了使用键侦听器(不是一个好主意)和使用键绑定(更好)的具体示例。