我正在研究一个java GUI项目,我需要在3D板中移动一个角色(带有ImageIcon的JLabel),这是2D中的梯形。 我使用的是null布局。 要做到这一点,我需要在上下移动时更改x坐标,但我无法通过等式来正确地更改它们。
这是我移动角色的代码。
private int x=0 , y=0;
private int velx = 0 , vely = 0;
private JButton[][] cells;
private int rows = 9, cols = 9;
public void moveUp()
{
int[] arr = { 8 , 6,4 , 2 , 0 ,0, -2 , -4 ,-6 , -8};
vely -= h/50 ;
velx += arr[cols];
cells[rows][cols].setIcon(null);
cells[--rows][cols].setIcon(position);
width -= width/20;
height-= height/20;
character.setIcon(new ImageIcon(((new ImageIcon(
icon).getImage()
.getScaledInstance(width, height,
java.awt.Image.SCALE_SMOOTH)))));
character.setBounds(x+velx, y+vely, width, height);
}
public void moveDown()
{
int[] arr = { 8 , 6,4 , 2 , 0,0 , -2 , -4 ,-6 , -8};
vely += h/50;
velx -= arr[cols];
cells[rows][cols].setIcon(null);
cells[++rows][cols].setIcon(position);
width += width/20;
height+= height/20;
character.setIcon(new ImageIcon(((new ImageIcon(
icon).getImage()
.getScaledInstance(width, height,
java.awt.Image.SCALE_SMOOTH)))));
character.setBounds(x+velx, y+vely, width, height);
}
public void moveLeft()
{
int[] arr = {45 , 46 , 47 , 48 , 50 , 56 , 57 ,58 , 59,60};
velx -= arr[rows];//w/23;
cells[rows][cols].setIcon(null);
cells[rows][--cols].setIcon(position);
character.setBounds(x+velx, y+vely, width, height);
}
public void moveRight()
{
int[] arr = {45 , 46 , 47 , 48 , 50 , 56 , 57 ,58 , 59,60};
velx +=arr[rows]; // w/23;
cells[rows][cols].setIcon(null);
cells[rows][++cols].setIcon(position);
character.setBounds(x+velx, y+vely, width, height);
}
答案 0 :(得分:0)
我可以根据这些信息看到一个潜在的问题。
向左或向右移动时,您不会将vely
归零,因此之前或之后的所有移动都会再次发生。
尝试在vely
和moveLeft()
moveRight()
设置为零