【发布时间】:2021-10-29 09:34:42
【问题描述】:
for (int i = 0; i < mapSize[0]; i++) {
for (int j = 0; j < mapSize[1]; j++) {
hashCodes[i][j] = new Image(emptyField);
int[] targetField = new int[2];
targetField[0] = i;
targetField[1] = j;
hashCodes[i][j].addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
return true;
}
@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
System.out.println("Empty Field clicked" + Arrays.toString(targetField));
for (Image[] imageRow : hashCodes) {
for (Image actualImage : imageRow) {
System.out.print(actualImage.hashCode() + " ");
}
System.out.println();
}
if (MarvelousMashup.useInfinityStone) {
MarvelousMashup.useInfinityStone = false;
MainMenu.client.getMessageHandler().sendUseInfinityStoneRequest
(MarvelousMashup.activeCharacter,
getActualEntity(MarvelousMashup.activeCharacter).getPosition(),
targetField,
getStone(MarvelousMashup.useInfinityStoneID));
}
}
});
tempField.addActor(hashCodes[i][j]);
}
}
我正在为每个 Actor 分配一个监听器。但是无论我点击哪个空白字段,每次点击的字段对我来说都是一样的,尽管每个演员都是不同的。
Empty Field clicked[5, 5]
817686795 1047478056 2115628016 611643685 1935122449 872826668
91323447 110053477 1209411469 1320105604 1076984738 1006751649
1171434979 1920907467 970535245 194481424 1534755892 1548081008
753321708 464400749 343563528 1719072416 2092801316 376635015
1344697180 28597262 300983713 284686302 1940445711 1356840024
1142347343 1810923540 1581078471 1932332324 33233312 1860491691
我做错了吗?因为据我了解,每个演员都应该有自己的听众,而不是所有人都是同一个听众。
【问题讨论】:
-
为什么说每个演员都有不同的听众?在我看来,它们都一样。你看到了什么让你得出结论演员是一样的?我们在这里只看到一个监听器的输出。应该有什么不同?你在代码中做了什么让每个监听器都不同?
-
@markspace 我正在向二维数组添加一个新图像并为它们分配一个侦听器。虽然基本上听众都需要做同样的事情,但他们需要不同的是
targetField。每当我创建一个新图像时,我都会使用一个新的目标字段向它添加一个新的侦听器。我所有听众的目标字段仍然是最后一个分配的字段。 -
@markspace 我还应该补充一点,由于某种原因,添加到该字段的每个图像都具有相同的哈希码,即使我在末尾添加了新创建的图像。
-
而
targetField是局部变量?你发这里的时候没改代码?我很惊讶Java让你这样做,它显然已经坏了。在侦听器中创建targetField字段,并通过在构造函数中传递所需的参数来分配它。 -
在 for 循环之前是否声明了另一个
targetField变量(可能前面有final)?这是我看到这段代码编译的唯一方法。
标签: java libgdx listener event-listener hashcode