组:只能添加BranchGroup节点

时间:2014-06-15 18:56:30

标签: java java-3d

我正在尝试将一个行为放入BranchGroup但是当我运行该程序时,它会返回给我这个错误:

“线程中的异常”Thread-1“javax.media.j3d.RestrictedAccessException:Group:只能添加一个BranchGroup节点”

我不得不说我把那些setCapabilities:

    ramaVisible = new BranchGroup();
    ramaVisible.setCapability(BranchGroup.ALLOW_DETACH);
    ramaVisible.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
    ramaVisible.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
    ramaVisible.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
    ramaVisible.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
    ramaVisible.setCapability(BranchGroup.ALLOW_BOUNDS_WRITE);

这就是我将行为放入BranchGroup

的方法
    Colisiones behaviourColision = new Colisiones(this.ramaVisible,this,this.juego);
    behaviourColision.setSchedulingBounds(new BoundingSphere());
    this.ramaVisible.addChild(behaviourColision);

我正在用Java3D开发这个程序

1 个答案:

答案 0 :(得分:0)

您可以找到一些其他信息in this SO post

不幸的是,我不相信这足以解决问题,但它让我走上正轨。

以下是我自己解决此问题的示例。

BranchGroup scene = new BranchGroup();
BranchGroup content = new BranchGroup();
content.setCapability(BranchGroup.ALLOW_DETACH);
content.setCapability(Group.ALLOW_CHILDREN_EXTEND);
scene.setCapability(BranchGroup.ALLOW_DETACH);
scene.setCapability(Group.ALLOW_CHILDREN_EXTEND);
scene.setCapability(Group.ALLOW_CHILDREN_WRITE);
scene.compile();

//add the initial set of children to "content"...
content.addChild(directionalLight);

scene.addChild(content);

//initialize a SimpleUniverse object...

universe.addBranchGraph(scene);

稍后在运行时:

content.detach();
content.addChild(newChild);
scene.addChild(content);

我不确定是否有更简单的方法,但不幸的是,仅在创建时设置功能是不够的。虽然你必须分离并重新组织一个组,但这可能比添加一个新的BranchGroup更好,这是另一个可以解决问题的黑客。