Java的Paint方法存在问题,刷新速度荒谬

我正在开发一个非常简单的R-Type版本作为大学的工作,但尽管它有效,但工艺速度很慢,所以运动是丑陋和笨拙的.
我使用方法重绘来刷新屏幕,还有其他方法或方法比它更好吗?

Video of Movement

主面板上的绘制方法

@Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
        g2.drawImage(fondo, 0, 0,1200,600,this);
        pj.paint(g2);
        g2D=g2;

    }

PJ的绘画方法

public void paint(Graphics2D g) {

    g.drawImage(imagen,x,y,this);
}

PJ的移动方法

public void move (KeyEvent e)  {
    int dx = 0; int dy = 0;
    int code = e.getKeyCode();

    switch (code) {
    case KeyEvent.VK_Q: dy-=1; break;
    case KeyEvent.VK_A: dy+=1; break;
    case KeyEvent.VK_P: dx+=1; break;
    case KeyEvent.VK_O: dx-=1; break;
    }

    int x = (getX()<maxX&&getX()!=0) ? getX()+dx : getX();
    int y = (getY()<maxY&&getY()!=0) ? getY()+dy : getY();

    if (getY()>=maxY||getY()==0) {
        if (dy==+1) y=y+1;
    }

    setPosicion(x, y); 

}

解决方法:

>图像fondo应该已经缩放到1200×600.
>我不确定,但是需要super.paint(g)吗?您也可以使用paintComponent.

必须正确完成事件处理(您似乎在按键上向下移动1个像素).我会设置方向和速度(1px),然后将它留给挥杆计时器进行连续移动.

重绘最好是弹性/灵活:重绘(20L)(每秒50帧);
事件如关键可能与EventQueue.invokeLater(new Runnable(){…});.

特别是你可以使用更改区域的重绘.

上一篇:【zabbix】Windows服务器获取IIS站点以及程序池状态


下一篇:java – 标题栏中的图形渲染