我試圖顯示一個字符在屏幕上移動,但x和y變量保持不變。我的印象是,當我改變一個靜態變量的值時,它在每個類的實例中都會改變。更改另一個類中的靜態變量的值
這裏是指移動字符
public class MoveChara {
private static int x, y;
private int dx, dy;
public void init() {
x = 30;
y = 50;
dx = 1;
dy = 1;
}
public void move() {
x += dx;
y += dy;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
這裏是調用Move方法
public class Game implements Runnable {
private MoveChara move;
private boolean running = false;
public void run() {
init();
while(running) {
tick();
render();
}
stop();
}
private void init() {
move = new MoveChara;
}
private void tick() {
move.move();
}
}
和階級的一部分類在繪製字符的方法
public class Draw extends JPanel {
public MoveChara move;
public ImageMake imgm;
@Override
public void paintComponent(Graphics g) {
imgm = new ImageMake();
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
move = new MoveChara();
move.init();
g2d.drawImage(
imgm.createImg("Images/SpriteSheet.png"),
move.getX(),
move.getY(),
this
);
}
}
如果您還沒有,請在您的方法中添加一些日誌語句以(1)確認它們正在被調用並(2)檢查值。 – DavidS
靜態變量屬於類而不是單個實例,所以它在每個實例中都不會改變 - 它只存在於一個地方。它可能會在每一個例子中出現變化,但那是因爲只有一個變量。 – Matthew
您在Game.init中有錯誤。該行應該讀爲'move = new MoveChara();' - 你缺少括號。 – Matthew