我想要的是按下" A"," S"," D"和" W"角色按各自的方向移动键。
问题在于,每当我改变方向时,我都会改变JLabel的图像(它是一个箭头)。
它确实很有效,但每次更改图像时,JLabel都会返回默认位置一秒钟。然后JLabel继续从那里开始。
这是代码。
private int pX;
private int pY;
public MovePj() {
initComponents();
pX=labelPj.getX();
pY=labelPj.getY(); }
private void formKeyPressed(KeyEvent evt) {
switch(evt.getKeyCode()){
case 87: //Norte
pY=pY-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\\movement\\07-north.png"));
break;
case 83: //Sur
pY=pY+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\\movement\\03-sur.png"));
break;
case 68: //Este
pX=pX+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\\movement\\01-east.png"));
break;
case 65: //Oeste
pX=pX-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\\movement\\05-west.png"));
break;
default:
break;
}
labelPersonaje.setLocation(pX, pY);
//labelPj.setBounds(pX, pY, labelPj.getWidth(), labelPj.getHeight());
}
角色移动正确,但要更改JLabel的图像,这将返回到预设点。
感谢。
答案 0 :(得分:0)
setIcon(...)
方法将调用:
revalidate();
repant();
标签上的导致调用布局管理器。所以我猜你需要使用:
panel.setLayout( null );
防止重新计算标签的大小/位置。您可以在创建面板时执行此操作。
此外,响应KeyEvent读取图像并不是一个好主意。您应该在加载类时阅读图像以获得更好的性能。