Java的Paint方法,可笑的刷新速度问题 [英] Problems with Java's Paint method, ridiculous refresh velocity

查看:283
本文介绍了Java的Paint方法,可笑的刷新速度问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发的R型作为高校工作的一个非常简单的版本,但尽管它的工作原理,工艺速度是很多慢,所以运动是丑陋而笨拙。
我使用的方法为重绘刷新屏幕,还有其他的方法或方式最好比呢?

运动的视频

在主面板上的 Paint方法

  @覆盖
    公共无效漆(图形G){
        super.paint(G);
        Graphics2D的G2 =(Graphics2D的)克;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
        g2.drawImage(丰多,0,0,1200,600,这一点);
        pj.paint(G2);
        G2D = G2;    }

PJ的paint方法

 公共无效漆(Graphics2D的G){    g.drawImage(imagen可,X,Y,这一点);
}

PJ的移动方法

 公共无效移动(KeyEvent的E){
    INT DX = 0; INT DY = 0;
    INT code = e.getKey code();    开关(code){
    案例KeyEvent.VK_Q:DY-= 1;打破;
    案例KeyEvent.VK_A:DY + = 1;打破;
    案例KeyEvent.VK_P:DX + = 1;打破;
    案例KeyEvent.VK_O:DX- = 1;打破;
    }    INT X =(的getX()&所述; MAXX&放大器;&放大器;!的getX()= 0)?的getX()+ DX:的getX();
    INT Y =(的getY()&所述; MAXY&放大器;&放大器;!的getY()= 0)?的getY()+ DY:的getY();    如果(的getY()> = || MAXY的getY()== 0){
        如果(DY == + 1)Y = Y + 1;
    }    setPosicion(X,Y);}


解决方案

  • 图像丰多应该已经扩展到1200x600。

  • 我不知道,但 super.paint(G)需要的?您还可以使用的paintComponent

事件处理(你似乎是1像素的重点下移),必须正确完成。我本来设定的方向和速度(1像素),它留给一个秋千定时器来完成连续移动。

重绘最好是做弹性/柔性:重绘(20L)(50帧每秒);
事件,如按键向下可能与 EventQueue.invokeLater(新的Runnable(){...});

尤其是你可能会使用与变化的区域重绘。

I'm developing a very simple version of R-Type as work for the university, but despite it works, the craft velocity is a lot of slow, so the movement is ugly and clumsy. I use the method repaint for refresh the screen, there are others methods or ways best than it?

Video of Movement

Paint method at main Panel

@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's paint method

public void paint(Graphics2D g) {

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

PJ's move method

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

}

解决方案

  • The image fondo should already be scaled to 1200x600.
  • I am not sure, but is super.paint(g) needed? You might also use paintComponent.

The event handling (you seem to be moving by 1 pixel on key down), must be done correctly. I would have set the direction and speed (1px), and leave it to a swing timer to do the continuous moving.

Repainting best is done resilient/flexible: repaint(20L) (50 frames per second); events like key-down maybe with EventQueue.invokeLater(new Runnable() { ... });.

Especially you might use repaint with the changed area.

这篇关于Java的Paint方法,可笑的刷新速度问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆