我有一个Group子类的实例,我要添加其他组。
其中一个组是一个组的子类,其方法为getCollision()
。
在那个方法中,我运行for each
周期来检查该组父母的所有孩子:
public Node getCollision() {
System.out.printf("Entering get collision %s\n", From.getId());
for (Node n: this.getParent().getChildren()) {
System.out.printf("n class: %s id %s\n", n.getClass(), n.getId());
问题是,输出从未提到Group的子类,其中getCollision正在执行,而其他几个Group添加到父类。例如,提到的对象是场景的PointLight,因为它是this.getParent()
的子节点,但是缺少其他几个包括getCollision()所有者组。 AmbientLight也不见了。
(还尝试了常规for循环for (int i = 0; i < this.getParent().getChildren().size(); i++)
,结果完全相同)。
现在我对getChildren()结果中缺少的其他对象有点好,但是在地球上如何调用getCollision,但是在添加之后它的类的对象不在父级的getChildren()中? ??
这是我将它们添加到父级的方式:
final PointLight sunLight = new PointLight(Color.WHITE);
sunLight.setId("point_light");
this.Scape.getChildren().add(sunLight);
final AmbientLight ambLight = new AmbientLight(Color.rgb(50, 50, 50));
ambLight.setId("ambient_light");
this.Scape.getChildren().add(ambLight);
final MyChar person1 = new MyChar();
person1.setId("person1");
this.Scape.getChildren().add(person1);
final MyChar person2 = new MyChar();
person2.setId("person2");
this.Scape.getChildren().add(person2);
...
final BouncingBall bb = new BouncingBall();
bb.setId("bouncing_ball");
this.Scape.getChildren().add(bb);
person2.getBall().Kick(bb, person2.getTranslateX(), person2.getTranslateY(), person2.getTranslateZ()); // Method Kick calls getCollision() in a Timeline
因此,当一个人2踢球时,时间线开始播放并且正在检查是否发生了碰撞。在getCollision()中,我只遇到一些对象,包括上面创建的灯,但不是person1而不是person2。
我的代码都没有任何类型的过滤可以应用于我所知道的getChildren()。没有任何API调用被覆盖,并且除了UI之外没有其他线程。
答案 0 :(得分:2)
这显然取决于操作系统。最初的问题出现在XP 64bit SP2下,JavaFX 8正式不想支持。在Win7 32bit SP1下执行的相同测试返回了该组的所有孩子。
编辑: 实际上它现在看起来更像是一个32位与64位的问题,因为问题存在于Win7 64位下,但不存在于Win7 32位下。