Java Flappy Bird图形速度慢

Java Flappy Bird图形速度慢,java,Java,我正在尝试编写一个简单的flappy bird游戏作为Java小程序。我遇到的问题是,图形非常无响应,通常在按键后需要5-10秒才能响应。此外,它仅在按下该键一定次数(大约6或7次)时才会响应。我不认为这是我的电脑的问题,因为我在高规格的MacBookPro(8GB内存,i5处理器)上运行它。以下是我使用的两个主要类: import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.a

我正在尝试编写一个简单的flappy bird游戏作为Java小程序。我遇到的问题是,图形非常无响应,通常在按键后需要5-10秒才能响应。此外,它仅在按下该键一定次数(大约6或7次)时才会响应。我不认为这是我的电脑的问题,因为我在高规格的MacBookPro(8GB内存,i5处理器)上运行它。以下是我使用的两个主要类:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
//The main class I use to run the game
public class Flap extends Applet implements Runnable, KeyListener
{
 final int WIDTH = 700, HEIGHT = 500;
 Thread thread;
 Bird b;
 boolean beenPressed = false;
 public void init()
 {
     this.resize(WIDTH, HEIGHT);

     this.addKeyListener(this);
     b = new Bird();
     thread = new Thread(this);
     thread.start();
 }

 public void paint(Graphics g)
 {
     g.setColor(Color.CYAN);
     g.fillRect(0, 0, WIDTH, HEIGHT - 100);
     g.setColor(Color.green);
     g.fillRect(0, 400, WIDTH, HEIGHT);
     b.draw(g);
 }

 public void update(Graphics g)
 {
     paint(g);
 }

@Override
 public void run() 
 {
    for(;;)
    {
        //Pillar upPillar = new Pillar()
        b.move();
        repaint();
        try
        {
            Thread.sleep(500);
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
    }
 }

@Override
public void keyPressed(KeyEvent e) 
{
    if(e.getKeyCode() == KeyEvent.VK_UP)
    {
        if(!beenPressed)
        {
            b.setUp(true);
        }
        beenPressed = true;
    }
    else
    {
        b.setDown(true);
    }
}

@Override
public void keyReleased(KeyEvent e) 
{
    if(e.getKeyCode() == KeyEvent.VK_UP)
    {
        beenPressed = false;
        b.setUp(false);
    }
    else
    {
        b.setDown(false);
    }
}

@Override
public void keyTyped(KeyEvent arg0) 
{

}
}


import java.awt.Color;
import java.awt.Graphics;
//The Bird class, which has the methods for the player to move 
public class Bird 
{
 int x, y, yvel;
 boolean goingUp, goingDown;
 public Bird()
 {
  x = 200;
  y = 200;
 }

 public void draw(Graphics g)
 {
     g.setColor(Color.yellow);
     g.fillRect(x, y, 60, 25);
 }

 public void move()
 {
     if(goingUp)
     {
         yvel -= 50;
     }
     else if(goingDown)
     {
         yvel += 50;
     }
     y += yvel;
 }

 public int getX()
 {
     return x;
 }

 public int getY()
 {
     return y;
 }

 public void setUp(boolean b)
 { 
     goingUp = b;
 }

 public void setDown(boolean b)
 {
     goingDown = b;
 }
}

它仍然没有完成,但在这个阶段,我认为这只鸟至少应该在移动。

图形并不慢,更新之间的时间太长了。它基本上允许在更新周期发生之前按下和释放按键

我会减少
线程睡眠(500)到更像
线程睡眠(10)并将移动增量更改为更像

public void move()
 {
     if(goingUp)
     {
         yvel -= 1;
     }
     else if(goingDown)
     {
         yvel += 1;
     }
     y += yvel;
 }
作为一个起点

建议。。。
使用小程序,不是个好主意。小程序已经过时,是一种过时的技术。小程序也不是双缓冲的,所以您可能会以一些可怕的闪烁结束。KeyListener因存在问题(无响应)而闻名,虽然它是使用AWT时的唯一解决方案,但使用Swing时ket绑定API是更好的解决方案


我建议的第一件事是,看看如何使用JPanel作为基本组件,然后看看并更好地理解绘画是如何工作的

如果你“真的”需要高性能(或者只是想对绘画过程有更多的控制),你还应该看看


我还建议您使用applet看看哪种api更适合这类应用

,这不是个好主意。小程序已经过时,是一种过时的技术<代码>小程序
也不是双缓冲的,因此您可能会以一些可怕的闪烁结束
KeyListener
因存在问题(无响应)而闻名,虽然它是使用AWT时的唯一解决方案,但使用AWT时ket bindings API是更好的解决方案Swing@MadProgrammer好的,你建议我用什么来代替呢?我建议的第一件事,正在研究使用
JPanel
作为基本组件,然后研究并更好地理解如何绘制works@MadProgrammer好的,谢谢。如果你“真的”需要高性能(或者只是想对绘画过程有更多的控制),我会检查一下,你也应该看看