更改另一个类中的静态变量的值
问题描述:
我试图显示一个字符在屏幕上移动,但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
);
}
}
答
一个静态变量属于该类而不属于该类的一个实例。 要访问一个静态变量从它的类以外,你可以做这样的:
claasName.variablename = newValue;
里面paintComponent
方法有对父类的init方法的调用,这是初始化x和y每次它叫做。如果你将初始化移动到静态变量声明,这个工作就可以了。 让我知道,如果这是你正在寻找。
+0
这不回答这个问题。他说:“我试图显示一个在屏幕上移动的角色,但x和y变量保持不变。”即使有了静态变量,如果他编码正确,他仍然应该看到他的角色移动。 – DavidS
+2
我编辑了我的答案,补充信息应该可以解决问题。 – goncalopinto
如果您还没有,请在您的方法中添加一些日志语句以(1)确认它们正在被调用并(2)检查值。 – DavidS
静态变量属于类而不是单个实例,所以它在每个实例中都不会改变 - 它只存在于一个地方。它可能会在每一个例子中出现变化,但那是因为只有一个变量。 – Matthew
您在Game.init中有错误。该行应该读为'move = new MoveChara();' - 你缺少括号。 – Matthew