我已经设法使我的程序检测到我在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
我不知道有任何其他方法可以移除球。请帮助。
答案 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);
}
}