去除球体

时间:2013-04-10 15:53:39

标签: java java-3d

我已经设法使我的程序检测到我在Java-3D中创建的两个球之间的碰撞;球员球和敌人球。现在的问题是我不知道当球员与敌人球发生碰撞时如何移除球员球。我尝试了一些简单的东西,比如objTrans.removeChild(sphere);objRoot.removeChild(objTrans);(objTrans是我的TransformGroup,objRoot是我的BranchGroup),在这两种情况下我收到此错误消息

Exception in thread "AWT-EventQueue-0" javax.media.j3d.RestrictedAccessException: Group: only a BranchGroup node may be removed

我也尝试了objRoot.detach();,但后来收到错误消息:

Exception in thread "AWT-EventQueue-0" javax.media.j3d.CapabilityNotSetException: BranchGroup: no capability to detach

我不知道有任何其他方法可以移除球。请帮助。

2 个答案:

答案 0 :(得分:0)

我自己设计游戏时遇到了同样的问题。我发现最好的解决方案是将可能被销毁的对象存储在列表中,我可以迭代并在必要时删除元素。

答案 1 :(得分:0)

一个简单的代码示例。每次调用updateModel()时,都会删除BranchGroup,然后将其更新为新形状,然后再次添加

private BranchGroup             mapGroup = null;

public void updateModel (....)
{
    Shape3D                 shape;

    // Update 3D primitives
    if (mapGroup != null)                       // remove previous 3D model
        object.removeChild (mapGroup);      

    shape = facesTexturedShape (....);
    if (shape != null)                          // add new 3D model if non-null
    {
        mapGroup = new BranchGroup ();
        mapGroup.setCapability (BranchGroup.ALLOW_DETACH);
        mapGroup.addChild (shape);

        object.addChild (mapGroup);         
    }
}