我试图将一个行为放到一个BranchGroup中,但是当我运行程序时,它会向我返回此错误:

“线程“ Thread-1”中的异常javax.media.j3d.RestrictedAccessException:组:仅可以添加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开发该程序

最佳答案

您可能会找到一些其他信息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更好,后者是另一种可以解决问题的技巧。

08-16 16:04