java - Java同一个变量在不同的地方有不同的值
问题描述
所以我有一个类来处理用户对作为 libgdx 应用程序的一部分创建的屏幕的输入。我的问题是变量cameraDelta,它是一个Vector2,在keyTyped 和getCameraDelta 中似乎有不同的值。
在两种方法中在运行时使用 sys.out.println 会显示每当按下任何“wasd”时值都会发生变化,并且该值会随着时间的推移而保持不变,但从 getCameraDelta 输出时该值始终保持在 (0, 0)
public class InputHandler implements InputProcessor {
private Firetruck myTruck;
private GameWorld myWorld;
private int mouseX;
private int mouseY;
private Vector2 cameraDelta;
public InputHandler(GameWorld myWorld) {
this.myWorld = myWorld;
myTruck = myWorld.getFiretruck();
cameraDelta = new Vector2(0, 0);
}
@Override
public boolean keyDown(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int keycode) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char character) {
if (character == 'w') {
cameraDelta.add(0, 5);
} else if (character == 's') {
cameraDelta.add(0, -5);
} else if (character == 'd') {
cameraDelta.add(5, 0);
} else if (character == 'a') {
cameraDelta.add(-5, 0);
}
return false;
}
public Vector2 getCameraDelta() {
/*/
Vector2 temp = this.cameraDelta.cpy();
/*/
Vector2 temp;
temp = new Vector2(0, 0);
temp.add(cameraDelta);
Gdx.app.log("getCameraDelta", cameraDelta.toString());
cameraDelta.x=0;
cameraDelta.y=0;
return temp;
}
解决方案
这是因为您在新Vector2
实例中添加了 object cameraDelta
。java中的对象是通过引用传递的,所以每当你改变你的东西时,cameraDelta
它会在任何使用的地方改变。例如 :
public class Foo {
public int fooNumber;
}
public class Bar {
public Foo fooBar;
public Bar() {
fooBar = new Foo();
fooBar.fooNumber = 1;
}
public void changeReference(Foo foo) {
System.out.println(fooBar.fooNumber); // RESULT -> 1
fooBar = foo; // here you're making your original foo to
//point to the "foo" passed in the method
foo.fooNumber = 0;
System.out.println(fooBar.fooNumber); // RESULT -> 0
}
public static void main(String[] args) {
Bar bar = new Bar();
Foo foo = new Foo();
bar.changeReference(foo);
System.out.println(bar.fooBar.fooNumber); // RESULT -> 0
}
}
推荐阅读
- excel - VLOOK Excel 结果与 Power Query 合并不匹配
- python - 使用 groupby 跨多个列减去列的平均值
- php - mysql到postgresql查询转换问题(参数)
- python - Python - 打开文本编辑器并实时查看更新
- javascript - 按键后的Three.js移动动画不起作用
- python - 为什么我的线性回归表现不佳?
- angular - 无法在页面上找到 firebase ui 小部件 - Angular 测试环境
- flutter - Flutter Autocomplete 小部件延迟更新建议
- r - How do I install the arrow package on RStudio Cloud with lz4 support?
- sqlite - SQLite3,使用 ORDER BY 时:“数据库磁盘映像格式错误”