Java的Paint方法,可笑的刷新速度问题 [英] Problems with Java's Paint method, ridiculous refresh velocity
问题描述
我正在开发的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?
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 usepaintComponent
.
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屋!