我试图将一个行为放到一个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更好,后者是另一种可以解决问题的技巧。