-3

我终于设法让我的程序检测到我在 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

我不知道任何其他方法可以使球被移除。请帮忙。

4

2 回答 2

0

我在自己设计游戏时遇到了同样的问题。我发现效果最好的解决方案是将可能被破坏的对象存储在一个列表中,我可以在必要时对其进行迭代和删除元素。

于 2013-04-10T16:00:34.877 回答
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);         
    }
}
于 2020-03-22T11:01:10.183 回答