我正在为大学开发一个非常简单的 R-Type 版本,但尽管它有效,但飞行速度却很慢,所以动作丑陋且笨拙。
我使用重绘方法来刷新屏幕,还有其他方法或比它更好的方法吗?
主面板的绘制方法
@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
应该已经缩放到 1200x600。
- 我不确定,但是是
super.paint(g)
需要吗?您也可以使用paintComponent
.
事件处理(按下按键时您似乎移动了 1 个像素)必须正确完成。我会设置方向和速度(1px),并将其留给摆动计时器来进行连续移动。
最好的重画是有弹性/灵活的:repaint(20L)
(每秒 50 帧);
像按键这样的事件可能与EventQueue.invokeLater(new Runnable() { ... });
.
特别是您可能会对更改的区域使用重绘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)